RxJS: ожидание значения от Observable, если оно не приходит по истечении указанного периода времени, выполните некоторые действия и снова подождите, после n попыток throwError

#rxjs #observable #wait #repeat

#rxjs #observable #подождите #повторите

Вопрос:

Итак, в чем мой случай: я отправляю сигнальное сообщение в сеть и хочу дождаться ответа, если он не придет в течение 2 секунд, я хочу отправить сигнальное сообщение снова. После 3 попыток я хочу выдать сообщение об ошибке и где-нибудь авторизоваться. Я подписываюсь на observable упрощенный ниже:

 from(messages).pipe(filter(value => condition(value)))
  

и мне нужно подождать, пока оно не выдаст ожидаемое значение, и одновременно выполнить процесс, описанный выше. Я был бы признателен за любую помощь!

Ответ №1:

  • timeout(2000) поможет вам ограничить время до 2 секунд
  • retry(3) даст вам максимум 3 попытки
  • и catchError или subscribe позволит вам обработать неудачную последнюю попытку

например:

 signal().pipe(
  timeout(2000),
  retry(3)
)
.subscribe({
  next: () => {},
  error: () => {}
})
  

Вот интерактивный пример (попробуйте поиграть с таймингами в switchMap обратном вызове)

ПРИМЕЧАНИЕ: если вы хотите выполнить другие операции с исходным потоком — вы могли бы share() это