我使用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的结果?
答案 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。