Попытка вызова http при получении определенного статуса http - PullRequest
0 голосов
/ 02 июня 2018

Я пытаюсь перехватить 103 Http-сообщение об ошибке.Вызов службы возвращает значение 103, если сервер понял запрос и начнет его обрабатывать, но ресурс немедленно недоступен.Что я хотел бы сделать, так это когда я получу 103, я бы хотел повторить попытку получения ресурса через каждые 5 секунд до 5 раз, и в конце которого я бы хотел, чтобы тайм-аут и вернул ошибку 404.Это то, что я до сих пор

getDoc() {
  return this.getError()
    .retryWhen((errors: any) => {
      return errors.switchMap((sourceError) => {
        console.log(sourceError);
        if (sourceError.status === 103) {
          console.log('status is 103');
          const notFoundError = new HttpErrorResponse({
            status: 404
          });
          return errors.delay(5000).take(5).concat(Observable.throw(notFoundError));
        }
        return Observable.throw(sourceError);
      });
    })
    .toPromise();
}

getError() {
  console.log('getting error');
  return Observable.throw(new HttpErrorResponse({
    status: 103
  }));
}

с функцией getError (), я пытаюсь имитировать 103, потому что сервер еще не отправляет 103.Возможно, getError () не является хорошим представлением ответа httpError.Я не был уверен, как еще воспроизвести и бросить наблюдаемую ошибку.

В любом случае, эта настройка не работает.Он вызывает getError (), завершается сбоем и проходит до console.log («status is 103») и после этого ничего.Любая помощь приветствуется.

1 Ответ

0 голосов
/ 02 июня 2018

Вы можете использовать HttpInterceptor .

@Injectable()
export class ServiceCallProvider implements HttpInterceptor {

public intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {

    return next.handle(request).do((event: HttpEvent<any>) => {
      if (event instanceof HttpResponse) {
        // do stuff with response if you want
      }
    }, (err: any) => {
      if (err instanceof HttpErrorResponse) {
        if (err.status === 103) {
          // handle logic
        }
      }
    });
  }
}
...