Иногда нам приходится выполнять определенную операцию неоднократно с течением времени с заданным периодом времени между запусками. Наиболее распространенные примеры — когда нам нужно опросить сервер, чтобы определить, успешно ли прошла операция, или автоматически обновить устаревший экран с новыми данными.

Реализация этой функциональности становится проще простого в 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!