Angular 链式方法中的异常处理?

Exception Handling in Angular Chained Methods?

我有一个简单的问题,我认为 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 种方法都可能 raise/emit 在任何失败点出错。我的问题是关于在这种情况下如何进行异常处理?

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

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

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

你只能有一个catchError,应该足够了。但要确保它在所有其他运营商的末尾。因为它捕获错误,替换流,因此允许流继续。例如参考下面的气泡图。

RxJS documentation on catchError

Angular University post


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