Угловая повторная попытка http-вызова только в случае ошибки клиента - PullRequest
1 голос
/ 09 марта 2019

Я новичок в 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 с проверкой экземпляра ошибки без ошибки компилятора

...