我正在使用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。