代码之家  ›  专栏  ›  技术社区  ›  luca

仅当错误是客户端时才执行角重试http调用

  •  1
  • luca  · 技术社区  · 6 年前

    我是新来的角度,我想重试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 具有 回程 无编译器错误的错误实例检查

    0 回复  |  直到 6 年前
    推荐文章