我有2个可观察的流,每个流都是由一个方法产生的,该方法既可以返回带有数据的observable,也可以返回如下错误:
getData(type: string, id: string): Observable<any> {
return this.http.get([apiUrl,
this.getUrl(type, id)].join('/'));
}
流是:
stream1$ = getData('data1, 'abcd');
stream2$ = getData('data2', 'zre4');
我需要一种方法将这两个流组合成一个,我试图使用.zip和.combineLatest但是当一个请求失败时我得到404错误,onError回调被调用,我松开了成功获取的数据请求流。我需要的是一种组合它们并获取数据的方法,即使其中一个流产生404错误。
提前致谢。
答案 0 :(得分:0)
你可以使用的rxjs中有很少的.merge
,.flatMap
等方法。
对于合并,您可以合并结果并获取单个流数据集以使用
Observable.merge(stream1$ = getData('data1, 'abcd'),
stream2$ = getData('data2', 'zre4')).subscribe( (result) => {
consloe.log(result)
});
rxjs merge的纪录片。如果您的需求是这样的话,您可以使用flatMap。
答案 1 :(得分:0)
对于任何感兴趣的人,我设法通过在两个流上使用catch运算符来解决问题,然后合并它们:
stream1$ = getData('data1, 'abcd').catch((error) => {
return Observable.of(error);
});
stream2$ = getData('data2, 'zre4').catch((error) => {
return Observable.of(error);
});
这样合并的observable可以获得&#34; good&#34;的数据。流即使另一个失败。更多细节可以在这里找到:
https://chrisnoring.gitbooks.io/rxjs-5-ultimate/content/error-handling.html
由于