从 HttpInterceptor 中的 catchError 返回可观察到的捕获错误会导致错误循环
Returning caught error observable from catchError in HttpInterceptor causes error loop
我有一个简单的拦截器,它可以处理请求并使用 RXJS catchError 捕获任何 http 错误。 catchError 接收到的第二个参数是捕获的可观察对象。在某些情况下,我想 return 这个错误并让它传播到订阅函数中的错误处理程序。问题是 return 捕获到的错误会导致无限循环(如示例所示: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 更改为这个,订阅将处理错误。
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<any> {
const requestCopy = request.clone();
return next.handle(request).pipe(catchError(error => {
if (error.status === 404) {
return throwError(error)
} else {
return of()
}
}))
}
原来我需要使用 return throwError(error)
作为 returning 捕获的可观察对象,或者(错误)都未能 return 正确地使用订阅函数错误处理程序。
那么最后的代码是:
return next.handle(request)
.pipe(
catchError((error) => {
console.log('Returning caught observable');
return throwError(error);
})
);
我有一个简单的拦截器,它可以处理请求并使用 RXJS catchError 捕获任何 http 错误。 catchError 接收到的第二个参数是捕获的可观察对象。在某些情况下,我想 return 这个错误并让它传播到订阅函数中的错误处理程序。问题是 return 捕获到的错误会导致无限循环(如示例所示: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 更改为这个,订阅将处理错误。
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<any> {
const requestCopy = request.clone();
return next.handle(request).pipe(catchError(error => {
if (error.status === 404) {
return throwError(error)
} else {
return of()
}
}))
}
原来我需要使用 return throwError(error)
作为 returning 捕获的可观察对象,或者(错误)都未能 return 正确地使用订阅函数错误处理程序。
那么最后的代码是:
return next.handle(request)
.pipe(
catchError((error) => {
console.log('Returning caught observable');
return throwError(error);
})
);