RxJs: дождитесь значения из Observable, если оно не пришло после определенного периода времени, сделайте что-нибудь и подождите снова, после того, как n попробует throwError - PullRequest
0 голосов
/ 17 марта 2019

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

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

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

1 Ответ

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

например:.

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

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

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

...