RxJS:如果一个或多个观察失败,如何等待几个可观察量

时间:2018-06-04 09:43:09

标签: javascript angular typescript rxjs

我使用zip运算符等待三个observable并同时处理结果:

Observable
   .zip(
      this.sapService.getProductSpareParts(this.identForm.get('ident').value),
      this.mediacacheService.getMediaItemsByIdent(this.identForm.get('ident').value),
      this.mediacacheService.getMetaInfos(this.identForm.get('ident').value)
    )
    .subscribe((results: any) => {
      // do stuff
    });

这三个可观测量中的一个或多个可能会失败并返回500个结果。在这种情况下,所有其他待定的可观察量都将被记录。

如何忽略错误的observable,不取消它们并等待剩余的observable完成,以处理成功的observable的结果?

2 个答案:

答案 0 :(得分:2)

看看下面的解决方案,我认为这将解决您的问题

var source = Rx.Observable.onErrorResumeNext(
     Rx.Observable.just(42),
     Rx.Observable.throw(new Error()),
     Rx.Observable.just(56),
     Rx.Observable.throw(new Error()),
     Rx.Observable.just(78)
   );

var subscription = source.subscribe(
     data => console.log(data)
   ); 

结果

// => 42

// => 56

// => 78

答案 1 :(得分:1)

正如Robin建议的那样,在每个可观察对象上使用catchError运算符和pipe运算符:

Observable
  .zip(
    this.sapService.getProductSpareParts(this.identForm.get('ident').value).pipe(catchError(val => of(`I caught: ${val}`))),
    ...
  )
  .subscribe((results: any) => {
    // do stuff
  });

有关详细信息,请参阅https://www.learnrxjs.io/operators/error_handling/catch.html