我在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中的异常处理程序是为每次重试尝试而调用的,因此错误消息会多次显示,甚至更糟糕的情况可能发生,例如,对于第一次尝试请求失败并显示错误消息第二次尝试成功,因此即使请求最终成功,也会向用户显示错误消息。
那么在这种情况下该怎么办?我想到了两种可能的解决方案: -
不要在全局处理程序中显示应该重试的请求的错误消息,而是在本地处理该请求。但是如何确定要在HttpInterceptor中重试哪个请求?
重试HttpInterceptor中的每个请求。但是可以重试每个请求吗?
我需要知道在这种情况下最好能做些什么。