Angular仅当客户端出错时才重试http调用

时间:2019-03-09 13:39:13

标签: angular http rxjs retrywhen

我是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次,即使该问题在服务器上也是如此,因此它毫无用处(此外,控制台会打印处理程序消息),我只想重试通信错误。 我读到有关retryWhenerror.error instanceof ErrorEvent的内容,以捕获客户端或网络错误。有一种方法可以将所有内容组合在一起,如果没有编译器错误,我无法通过检查错误实例来更改retryretryWhen

0 个答案:

没有答案