Angular 2.0 - 将承诺链转换为Observables

Yan*_*aim 7 javascript reactive-programming rxjs angularjs angular

我正在将NG 1.X服务转换为NG 2.0.

我的NG 1.X服务承诺链接(简化):

dataService.search = function(searchExp) {
      return this.getAccessToken()
      .then(function(accesstoken) {
        var url = $interpolate('https://my-api-url?q={{search}}&{{accesstoken}}')({search: searchExp, accesstoken: accesstoken});
        return $http({
          url: url,
          method: 'GET',
          cache: true
        });
      }).then(function(response) {
        return response.data;
      });
    };
Run Code Online (Sandbox Code Playgroud)

我想将search服务转换为Angular 2.0服务,使用http和返回Observable.我更喜欢保持getAccessToken服务不变,作为NG 1.X服务,它返回一个承诺.

我正在考虑使用Observable.fromPromise旧的"承诺"服务.

我该怎么做?我该如何将这两个链接起来?

编辑:

只是为了澄清,我希望它是这样的:

dataService.search = function(searchExp) {
 return this.getAccessToken()
        .then(function(accesstoken) {
           //Here I want to use:
           // this.http.get(url).subscribe(() => ...)
          });
        };
Run Code Online (Sandbox Code Playgroud)

dfs*_*fsq 8

你应该让search方法返回Observable对象.像这样的东西:

dataService.search = function(searchExp) {

    var promise = new Promise((resolve, reject) => {
        this.getAccessToken()
            .then(accesstoken => {
                return this.http.get('data.json')
                    .map(response => response.json())
                    .subscribe(data => resolve(data), err => reject(err))
            })
    });

    return PromiseObservable.create(promise); // Observable.fromPromise(promise)
};
Run Code Online (Sandbox Code Playgroud)

  • 是的,我的版本也不会工作.我建立了一个似乎更好的实验.检查更新版本.这是一个演示:http://plnkr.co/edit/VPnCTXV6lVayIp4HJ8pV?p = info (2认同)