【问题标题】:Angular Combine RxJs observable streams and get data when one of the streams produces an errorAngular 组合 RxJs 可观察流并在其中一个流产生错误时获取数据
【发布时间】:2017-09-07 21:54:21
【问题描述】:

我有 2 个可观察的流,每个都由一个方法生成,该方法可以返回带有数据的可观察对象或类似这样的错误:

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');

我需要一种将这 2 个流合并为一个的方法,我尝试使用 .zip 和 .combineLatest,但是当一个请求失败时,我收到 404 错误,调用 onError 回调并且我丢失了成功获取的数据请求流。我需要的是一种组合它们并获取数据的方法,即使其中一个流产生 404 错误。

提前致谢。

【问题讨论】:

    标签: angular rxjs


    【解决方案1】:

    在 rxjs 中很少有像 .merge.flatMap 这样的方法,你可以使用 .. 对于合并,您可以合并结果并获取要使用的单组流数据

    Observable.merge(stream1$ = getData('data1, 'abcd'),
    stream2$ = getData('data2', 'zre4')).subscribe( (result) => {
     consloe.log(result)
    });
    

    rxjs merge 的文档。如果您的要求是这种方式,您可以使用 flatMap。

    【讨论】:

      【解决方案2】:

      对于任何感兴趣的人,我设法通过在两个流上使用 catch 运算符来解决问题,然后像这样合并它们:

      stream1$ = getData('data1, 'abcd').catch((error) => {
        return Observable.of(error);
      });
      
      stream2$ = getData('data2, 'zre4').catch((error) => {
        return Observable.of(error);
      });
      

      这样,即使另一个失败了,合并后的 observable 也会获得“好”流的数据。更多细节可以在这里找到:

      https://chrisnoring.gitbooks.io/rxjs-5-ultimate/content/error-handling.html

      谢谢

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-10-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-09-01
        • 1970-01-01
        • 2019-10-18
        相关资源
        最近更新 更多