在我的Angular应用程序之一中,我有两个类型为Observable<Object1[]>
和Observable<Object2[]>
的对象,它们在resolver
中调用不同的apis,如下所示:
resolve(): Observable<[Array<Object1>, Array<Object2>]> {
const object1 = this.bookingService.executeService1(); // returns Observable<Object1[]>
const object2 = this.bookingService.executeService2(); // returns Observable<Object2[]>
return Observable.forkJoin(object1, object2); // Need to do error handing here
}
除非服务返回错误,否则它可以正常工作。如果出错,它会在控制台中显示为未捕获。我已经通过像邮递员这样的应用程序检查了服务api,并且通过它可以正常工作。
我试图抓住它:
return Observable.forkJoin(object1, object2)
.catch(error => {
console.log('error', error);
});
但它没有帮助。
请通过Observable.forkJoin()
告诉我是否有任何方法在解析器中捕获错误;
答案 0 :(得分:1)
您可以在the forkJoin's learnrxjs.io page找到您关注的答案。
请注意,如果任何内部observable提供给forkJoin 错误,你将失去任何其他可观察到的观察者的价值 如果您没有正确捕获错误,则已经完成 内在的可观察性。如果你只关心所有内在的可观察者 成功完成后,你可以在外面发现错误。
const example = forkJoin(
//emit 'Hello' immediately
of('Hello'),
//emit 'World' after 1 second
of('World').pipe(delay(1000)),
// throw error
_throw('This will error')
).pipe(catchError(error => of(error)));
答案 1 :(得分:0)
您可以按RxJS Angular2 handling 404 in Observable.forkjoin中提到的那样使用它。
希望它对你有所帮助!
答案 2 :(得分:0)
您可以通过这种方式捕获错误:
let first = Observable.of({value : 1});
let second = Observable.throw({value : 2});
Observable.forkJoin(first, second)
.subscribe((res: Array<any>) => console.log(res),
(error) => {
console.log(error); //{value: 2} will get displayed here
});
您还可以独立捕获每个observable中的错误,并在这种情况下返回另一个observable
return Observable.forkJoin(
this.http.get('/url')
.map((res:Response) => res.json())
.catch(res:Response => Observable.of({}),
this.http.get('/url2')
.map((res:Response) => res.json())
.catch(res:Response => Observable.of({}),
);