rxjs6: RetryWhen не работает при возврате таймера - PullRequest
0 голосов
/ 29 мая 2020

Я создаю небольшую функцию, которая обновит sh токен доступа по истечении указанного c времени (на основе расчета). выбрано, функция повторит попытку через 2 секунды.

Если я использую retry вместо retryWhen, функция в порядке, но когда я меняю на retryWhen и возвращаю timer, функция не повторяет попытку через 2 секунды.

Я что-то не так делаю?

1 Ответ

1 голос
/ 29 мая 2020

Первый:

Я создаю небольшую функцию

Публикует линейную функцию +100 с большими отступами: D


Второй:

Я думаю, вы не должны использовать flatMap, а delayWhen:

retryWhen((errors) => errors.pipe(
  delayWhen((error) => {
    retriedTime++;

    if (retriedTime > 2) {
      throw error;
    }

    if (!(error instanceof Error)) {
      return throwError(error);
    }

    if (ExceptionCodeConstant.accessTokenIsRefreshing === (error as Error).message) {
      return timer(2000);
    }

    return throwError(error);
  })
))

Упрощенное stackblitz , показывая, что это работает

...