我是 Angular 新手,如果客户端和服务器之间出现网络中断或某些错误,我想重试 http 调用。目前我有官方文档建议的这种配置
return this.http.get<ApiResult<Atto[]>>(this.apiEnv + "Atti")
.pipe(
retry(3), // retry a failed request up to 3 times
catchError(err => this.handleError.handleError(err, {severity:'error', summary:'Impossibile recuperare gli atti', life:5000})) // then handle the error;
);
这是错误处理程序:
public handleError(error: HttpErrorResponse, message : Message) {
this.toastService.addSingle(message);
return throwError('Something bad happened; please try again later.');
};
我有一个身份验证或授权错误的拦截器:
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
return next.handle(request).pipe(catchError(err => {
//no authentication
if (err.status === 401) {
this.router.navigate(['login']);
}
//no authorization
if (err.status === 403) {
this.auth.logout().subscribe(
() => this.auth.logoutSuccess()
);
}
const error = err.error.message || err.statusText;
return throwError(error);
}))
}
问题是我所有的 http 重试 3 次,即使问题出在服务器上,所以它是无用的(此外控制台打印处理程序消息),我只想重试通信错误。我阅读retryWhen
并error.error instanceof ErrorEvent
捕获客户端或网络错误。retry
有一种方法可以一起制作,我不能retryWhen
在没有编译器错误的情况下检查错误实例