我正在将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; }); };
我想将搜索服务转换为Angular 2.0服务,使用http并返回Observable.我更喜欢保持getAccessToken服务不变,作为NG 1.X服务,它返回一个promise.
我正在考虑在旧的“承诺”服务上使用Observable.fromPromise.
我该怎么做?我该如何将这两个链接起来?
编辑:
只是为了澄清,我希望它是这样的:
dataService.search = function(searchExp) { return this.getAccessToken() .then(function(accesstoken) { //Here I want to use: // this.http.get(url).subscribe(() => ...) }); };
解决方法
你应该让搜索方法返回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) };