Как вызвать catchError и повторить попытку / Retry - RXJS - PullRequest
0 голосов
/ 31 октября 2019

Я использую Redux-Observables вместе с RXJS и Backoff RXJS для повторной попытки, теперь у меня есть этот эпос, где он будет запрашивать на сервере, если запрос не удается, он отправит действие Redux и будет повторятьфункция.

defer(callApi).pipe(
  catchError((error) => {
    return actions.hasError(error) // dispatch to redux
  }),

  // this should retry the request 10 times
  retryBackoff({
    shouldRetry: true,
    initialInterval: 1000,
    maxRetries: 10
  })

Кажется, что выполнение приведенного выше кода делает только 1 вещь (в зависимости от того, что произойдет раньше). Как я могу сделать так, чтобы я мог инициировать действие при возникновении ошибки и повторить попытку одновременно?

Ответы [ 2 ]

0 голосов
/ 01 ноября 2019

Вы можете просто сбросить с себя блок catchError, чтобы он все равно был поднят retryBackoff

defer(callApi).pipe(
  catchError((error) => {
    return concat(actions.hasError(error), throwError(error))
  }),

  // this should retry the request 10 times
  retryBackoff({
    shouldRetry: true,
    initialInterval: 1000,
    maxRetries: 10
  })
)
0 голосов
/ 31 октября 2019

Вы можете использовать tap для выполнения побочных эффектов при ошибках, не перехватывая ошибку, если retryBackoff используется для восстановления после ошибок.

defer(callApi).pipe(
  tap({ error: e => actions.hasError(e) }),

  // this should retry the request 10 times
  retryBackoff({
    shouldRetry: true,
    initialInterval: 1000,
    maxRetries: 10
  })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...