Угловая повторная попытка запроса API, если код ошибки HTTP равен 500 - PullRequest
0 голосов
/ 08 февраля 2019

Я пытаюсь добавить простую повторную попытку HTTP к моим вызовам API как

this.http.post(url, {payload})
    .pipe(retry(3)).sub.....

Как добавить следующие случаи?

  1. Только 3 повторные попытки
  2. с интервалом в 1 сек.
  3. Только при коде ошибки HTTP 500

1 Ответ

0 голосов
/ 08 февраля 2019

Вы можете использовать retryWhen из RxJS, чтобы повторить любые запросы.ниже приведен фрагмент кода, который повторяется 3 раза перед выдачей ошибки:

private handleRetry<T>(source: Observable<T>): Observable<T> {
        return source.pipe(retryWhen(e => e.pipe(scan((errorCount, error) => {
            if (errorCount >= 3) {
                throw error;
            }
            return errorCount + 1;
        }, 0),
            delay(1000)
        )));
    }

при вызове компонента вы можете использовать handleRetry:

this.http.post(url, {payload})
    .pipe(this.handleRetry).sub.....

Вы также можете tap в ошибку, чтобы решить, нужно ли вам повторить попытку на основе кода состояния: Пример:

server.getData().pipe(
  retryWhen(errors =>
    errors.pipe(
      delay(1000),
      tap(errorStatus => {
        if (!errorStatus.startsWith('5')) {
          throw errorStatus;
        }

        console.log('Retrying...');
      })
    )
  )
);
...