我有一个简单的拦截器,它可以处理请求并使用 RXJS catchError 捕获任何 http 错误。 catchError 接收到的第二个参数是捕获的可观察对象。在某些情况下,我想返回此错误并让它传播到订阅函数中的错误处理程序。问题是返回捕获的错误会导致无限循环(如示例所示:https://stackblitz.com/edit/angular-u4gakr)
拦截器中的拦截函数,当接收到 HTTP 错误(如 404)时,catchError 卡在一个循环中:
return next.handle(request)
.pipe(
catchError((error, caught$) => {
console.log('Returning caught observable');
return caught$;
})
);
我可能对拦截器或 RxJS catchError 有一些误解。有什么建议吗?
最佳答案
原来我需要使用 return throwError(error)
作为返回捕获的可观察对象,或者 of(error) 都未能将其正确返回给订阅函数错误处理程序。
那么最终的代码是:
return next.handle(request)
.pipe(
catchError((error) => {
console.log('Returning caught observable');
return throwError(() => new Error('The Error'));
})
);
关于angular - 从 HttpInterceptor 中的 catchError 返回可观察到的捕获错误会导致错误循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51948677/