Angular组合RxJs可观察流并在其中一个流产生错误时获取数据

时间:2017-09-07 21:54:22

标签: angular rxjs

我有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错误。

提前致谢。

2 个答案:

答案 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

由于