当HttpInterceptor中存在全局错误处理程序时,以角度4重试请求

时间:2018-06-11 10:59:33

标签: angular

我在HttpInterceptor中有HTTP请求的全局错误处理程序。

@Injectable()
export class HttpErrorInterceptor implements HttpInterceptor {
    intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
        return next.handle(request)
            .catch((err: HttpErrorResponse) => {

                errorService.showErrorMessage('An error occurred');

                return Observable.throw(err);
            });
    }
}

现在我想将retry()添加到一个请求中,以便在发生任何异常时重新发送。

this.service.get().pipe(retry(2)).subscribe({
    next: val => console.log(val),
    error: val => console.log(`Retried 2 times then quit!`)
});

现在的问题是HttpInterceptor中的异常处理程序是为每次重试尝试而调用的,因此错误消息会多次显示,甚至更糟糕的情况可能发生,例如,对于第一次尝试请求失败并显示错误消息第二次尝试成功,因此即使请求最终成功,也会向用户显示错误消息。

那么在这种情况下该怎么办?我想到了两种可能的解决方案: -

  1. 不要在全局处理程序中显示应该重试的请求的错误消息,而是在本地处理该请求。但是如何确定要在HttpInterceptor中重试哪个请求?

  2. 重试HttpInterceptor中的每个请求。但是可以重试每个请求吗?

  3. 我需要知道在这种情况下最好能做些什么。

0 个答案:

没有答案