#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()
это