【问题标题】:Exception Handling in Angular Chained Methods?Angular 链式方法中的异常处理?
【发布时间】:2019-07-21 17:43:32
【问题描述】:

我有一个简单的问题,我认为 Angular 专家很容易回答。

我有一个方法如下:

 private uploadPicture(imagePath: string, apiUrl: string): Observable<ApiResponse<string>> {

   return this.convertFileFromFilePathToBlob(imagePath).pipe(
      switchMap(item => this.convertBlobToFormData(item)),
      switchMap(formData => this.postImageToServer(formData, apiUrl)),
      catchError((error: any) => {
        if (error instanceof Response) {
            return throwError(new AppError(error));
        } else {
            return throwError(new AppError(null, 'Error occured at convertFileFromFilePathToBlob.'));
        }
      })
    );
  }

我在一个方法中链接了 3 个方法:

  1. convertFileFromFilePathToBlob
  2. convertBlobToFormData
  3. postImageToServer

所有 3 种方法都可以在任何故障点引发/发出错误。我的问题是在这种情况下如何进行异常处理?

我当前的实现是否只有一个catchError 可以吗?如果没问题,如果任何链式方法引发错误,是否会执行?

是否需要在每个方法之后使用多个 catchError 运算符来捕获其错误?如果是,我不知道该怎么做?

谁能解释在这种情况下我应该如何处理错误?

【问题讨论】:

  • 一个catchError 很好,当其中任何一个出现错误时都会执行。

标签: angular ionic-framework rxjs ionic4 rxjs-pipeable-operators


【解决方案1】:

你只能有一个catchError,应该足够了。但请确保它位于所有其他运算符的末尾。因为它捕获错误,替换流,从而允许流继续。例如参考下面的气泡图。

RxJS documentation on catchError

Angular University post


在你的情况下,我看不出使用catchError 的理由,你可以使用Observable 的错误处理。 .subscribe 接受第二个参数作为错误处理函数。

【讨论】:

  • 你的意思是说,我也在重新抛出 catch 中的错误,这就是为什么你看不到它的意义......对吗?即使我没有在这里捕获并抛出错误,它也会命中订阅处理程序的错误方法(如果发生错误)?
  • @AnkushJain 是的。 catchError 在您需要清除不需要的错误并继续流时很有用。如果目的是阻止它,那么只需使用订阅的错误处理程序。
猜你喜欢
  • 1970-01-01
  • 2014-04-02
  • 1970-01-01
  • 2016-07-12
  • 2015-05-21
  • 2018-08-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多