Javascript Angular 2.0-将承诺链转换为可观测值
我正在将NG1.X服务转换为NG2.0 我的NG 1.X服务具有承诺链接(简化): 我想将Javascript Angular 2.0-将承诺链转换为可观测值,javascript,angularjs,reactive-programming,angular,rxjs,Javascript,Angularjs,Reactive Programming,Angular,Rxjs,我正在将NG1.X服务转换为NG2.0 我的NG 1.X服务具有承诺链接(简化): 我想将search服务转换为Angular 2.0服务,使用http并返回Observable。我更喜欢将getAccessToken服务保持不变,作为一个返回承诺的NG1.X服务 我正在考虑在旧的“承诺”服务上使用observeble.fromPromise 我怎么做?我怎么才能把那两个锁起来 编辑: 我只是想澄清一下,我希望它是这样的: dataService.search = function(search
search
服务转换为Angular 2.0服务,使用http
并返回Observable
。我更喜欢将getAccessToken
服务保持不变,作为一个返回承诺的NG1.X服务
我正在考虑在旧的“承诺”服务上使用observeble.fromPromise
我怎么做?我怎么才能把那两个锁起来
编辑:
我只是想澄清一下,我希望它是这样的:
dataService.search = function(searchExp) {
return this.getAccessToken()
.then(function(accesstoken) {
//Here I want to use:
// this.http.get(url).subscribe(() => ...)
});
};
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)
};
您应该使
search
方法返回可观察对象。大概是这样的:
dataService.search = function(searchExp) {
return this.getAccessToken()
.then(function(accesstoken) {
//Here I want to use:
// this.http.get(url).subscribe(() => ...)
});
};
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)
};
我将@dfsq的Plunker转换为beta.0<代码>映射()如果不导入它,它似乎不再可用(但我们这里不需要它)
从'angular2/core'导入{Component,Injectable};
从'angular2/HTTP'导入{HTTP_提供者,HTTP};
从“rxjs/observable/fromPromiseObservable”导入{PromiseObservable};
@可注射()
导出类数据服务{
构造函数(private _http:http,private _accessService:accessService){}
搜索(searchExp){
var承诺=新承诺((解决、拒绝)=>{
这是.\u accessService.getAccessToken()//有关accessService,请参阅Plunker
。然后(accessToken=>{
返回此值。_http.get('data.json')//在此处使用accessToken
.subscribe(res=>resolve(res.json()),err=>reject(err));
});
});
返回可观察的承诺。创建(承诺);
}
}
@组成部分({
选择器:“我的应用程序”,
提供者:[HTTP\U提供者、AccessService、DataService],
模板:`Data loaded{{Data | json}}
`
})
导出类AppComponent{
资料:有;
构造函数(私有_dataService:dataService){
console.clear();
}
恩戈尼尼特(){
此.\u dataService.search('test'))
.订阅(res=>{
这个数据=res;
});
}
}
beta.0可以观察到。fromPromise(dataService.search)?这是显而易见的。我的问题是如何从函数返回这个值?我锁不住它!谢谢你的回答。我的问题是如何将第二个承诺更改为Angular 2.0
http
,它使用Observable。您是指内部$http吗?只需将Observable作为内部承诺返回即可。然后返回Observable.fromPromise(promise)代码>。请参阅更新的答案。这很有趣。我试过了,但是在调用我拥有的服务的组件中:`dataService.search(data.subscribe((res)=>//res这里是一个可观察的!!)是的,我的版本也不起作用。我做了一个似乎效果更好的实验。检查更新版本。这里还有一个演示: