错误处理 - Obularable.forkJoin与Angular2中的几个Observable对象

时间:2018-04-12 06:51:55

标签: angular typescript rxjs

在我的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()告诉我是否有任何方法在解析器中捕获错误;

3 个答案:

答案 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({}), );