我有一个简单的拦截器,可以处理请求并使用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的某些信息。有什么建议吗?
答案 0 :(得分:0)
您可以将返回值更改为此,订阅将处理错误。
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()
}
}))
}
答案 1 :(得分:0)
原来,我需要使用return throwError(error)
来返回捕获的可观察值,或者of(error)都无法将其正确地返回给订阅函数错误处理程序。
最后的代码是:
return next.handle(request)
.pipe(
catchError((error) => {
console.log('Returning caught observable');
return throwError(error);
})
);