大家, 我正在学习Web App程序使用Angular 2,我希望实现一个服务。
这样的服务:
@Injectable
export class MyService {
private _data: Any;
private _dataReady: boolean = false;
getData(): Observable<any> {
if (this._dataReady)
return Observable.of(this._data);
else {
http.get('url').subscribe(response=>{
this._data = do_some_calc(response, this._data);
if (need_more_data(this._data)) {
Recursive http.get('url')....
} else {
this._dataReady = true;
return Observable.of(this._data);
}
});
}
}
}
对我来说困难的部分是数据没有准备好,需要从网上获取一些数据,并依赖新到的数据中的信息,可能需要再次从网上获取另一个数据。
如何实现此部分并最终返回客户端Observalbe?
我知道如何实现这个使用回调函数,但我对如何使用RxJS工具非常感兴趣。
感谢。
答案 0 :(得分:0)
如果请求相互依赖,通常会链接多个concatMap
运算符:
http.get('url')
.concatMap(response => {
this._data = do_some_calc(response, this._data);
if (need_more_data(this._data)) {
return http.get('url')
.concatMap(response => { ... })
.concatMap(response => { ... });
} else {
this._dataReady = true;
return Observable.of(this._data);
}
})
.subscribe(response => { ... });
或者您可以创建一个返回Observable并自行调用的递归函数:
function recursiveGet(url): Observable {
return http.get('url')
.concatMap(response => {
if (need_more_data(this._data)) {
return recursiveGet(url);
} else {
this._dataReady = true;
return Observable.of(this._data);
}
});
}