首页 > 解决方案 > 从 HttpInterceptor 中的 catchError 返回可观察到的已捕获错误会导致错误循环

问题描述

我有一个简单的拦截器,它处理请求并使用 RXJS catchError 捕获任何 http 错误。在 catchError 中接收到的第二个参数是被捕获的 observable。在某些情况下,我希望返回此错误并让它传播到 subscribe 函数中的错误处理程序。问题是返回捕获的错误会导致无限循环(如示例所示:https ://stackblitz.com/edit/angular-u4gakr )

拦截器中的拦截函数,当接收到 HTTP 错误时,catchError 卡在循环中,例如 404:

return next.handle(request)
  .pipe(
    catchError((error, caught$) => {
      console.log('Returning caught observable'); 
      return caught$;
    })
  );

我可能对拦截器或 RxJS catchError 有误解。有什么建议吗?

标签: angularrxjsrxjs6

解决方案


原来我需要return throwError(error)用作返回捕获的可观察对象,或者 of(error) 都未能正确地将其返回给订阅函数错误处理程序。

那么最后的代码是:

return next.handle(request)
  .pipe(
    catchError((error) => {
      console.log('Returning caught observable'); 
      return throwError(error);
    })
  );


推荐阅读