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



我正在使用zip运算符等待三个可观察量并同时处理结果:

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 结果。在这种情况下,所有其他待处理的可观察量将被取消。

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

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

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

正如 Robin 所建议的,在每个可观察量上使用带有pipe运算符的catchError运算符:

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。

相关内容

  • 没有找到相关文章

最新更新