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)
你应该让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)