在我的一个 Angular 应用程序中,我有两个类型为 Observable<Object1[]>
和 Observable<Object2[]>
的对象,它们在resolver
中调用不同的 API,如下所示:
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()
捕获解析器中的错误;
forkJoin的 learnrxjs.io 页面中找到问题的答案。
请注意,如果向 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)));
<</div>
div class="one_answers"> 你可以按照 Observable.forkjoin 中的 RxJS Angular2 处理 404 中提到的方式使用它。
希望对您有所帮助!
您可以通过以下方式捕获错误:
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
});
您还可以单独捕获每个可观察量中的错误,并在这种情况下返回另一个可观察量。
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({}),
);