簡體   English   中英

RXJS catchError 不捕獲網絡故障錯誤

[英]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

我建議使用throwErrorof在您的攔截器中使用,因為原始錯誤會在 Observable stream 上發出回並最終到達您的服務中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM