[英]RXJS catchError does not catch network failure errors
我有一个服务方法,它发出 API 发布请求以注销应用程序。
public logout(): Observable<APIResponse | ResponseError> {
return this.http
.post<APIResponse>(API_ENDPOINT + LOGOUT_URL, '{}', this.httpHeaders)
.pipe(catchError((error) => {
return of(this.handleError(error.error));
}));
}
catchError
捕获从服务器抛出的所有其他有效错误。 但是,当没有网络连接或服务器关闭时,它就不起作用。 有趣的是,所有这些错误都被我的拦截器正确捕获,该拦截器对特定响应进行了一些自定义处理。
谁能告诉我为什么它在拦截器中工作但不在我的服务中? 我也在拦截器中使用相同的catchError
运算符。
这是不接收器
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
if (req.url.endsWith('/login')) {
return next.handle(req);
}
const body = JSON.parse(<string>req.body);
const copiedReq = req.clone({ body: body });
return next.handle(copiedReq)
.pipe(tap(evt => { }), catchError((err: any) => {
if (err instanceof HttpErrorResponse) {
const httpError: HttpErrorResponse = err;
// Custom logic ...
}
return of(err);
}));
}
如果您在拦截器中使用相同的catchError
,那么您描述的行为正是我所期望的。 在这种情况下,错误会被您的拦截器吞下。
.pipe(catchError((error) => {
return of(this.handleError(error.error));
}));
catchError
捕获 Observable stream 上的任何错误。 如果一个错误到达你的拦截器,它会被捕获并在 Observable stream 上使用of
我建议使用throwError
而of
在您的拦截器中使用,因为原始错误会在 Observable stream 上发出回并最终到达您的服务中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.