Иногда нам приходится выполнять определенную операцию неоднократно с течением времени с заданным периодом времени между запусками. Наиболее распространенные примеры — когда нам нужно опросить сервер, чтобы определить, успешно ли прошла операция, или автоматически обновить устаревший экран с новыми данными.
Реализация этой функциональности становится проще простого в RxJS версии 7. Мы можем использовать оператор repeat()
, используя новую опцию delay
в v7.5.0
. В качестве примера предположим, что мы хотим отображать последние метрики для наших пользователей каждые 30 секунд:
Наблюдаемый source
будет повторяться вечно, пока не будет явно уничтожен, с задержкой 30 секунд между повторениями. Кроме того, мы также можем использовать параметр count
, который указывает количество повторений источника.
Допустим, у нас есть случай, когда мы выполняем какие-то действия, требующие опроса с сервера, пока не получим status
:
Параметр delay
также принимает функцию, которая предоставляет количество раз, когда источник был подписан, при этом возвращаемое значение представляет собой ввод observable
, указывающий, когда следует повторить source
.
Выбрав эту опцию, мы можем установить delay
, которое увеличивается на одну секунду после каждого повторения:
Оператор repeat()
полезен, когда исходный код завершен. Мы можем использовать оператор retry()
для обработки ошибок. Начиная с v7.3.0
, мы можем использовать параметр delay
для обработки повторных попыток с delay
и быстрой реализации экспоненциальной отсрочки.
Экспоненциальная отсрочка — это стандартная стратегия обработки ошибок. При таком подходе клиент периодически повторяет неудачный запрос с увеличением задержки между запросами. Вот несколько вариантов, которые мы можем использовать:
Подпишитесь на меня в Medium или Twitter, чтобы узнать больше об Angular и JS!