BACK
Use casesOffline queue — отправка после reconnect
Use cases · 34

Offline queue — отправка после reconnect

Паттерн

Пользователь в метро без сети, но продолжает работать в приложении — создаёт заметки, отправляет сообщения. Эти действия копятся в очереди. Когда сеть вернулась — отправляем всё, причём в том же порядке.

Какую проблему решаем

Порядок важен: «создать товар» должно уйти раньше «обновить товар». Если просто отправить накопленные actions параллельно — backend получит их вразнобой и может рассыпаться. Императивный массив-очередь мутируется из разных обработчиков (online/action), легко рассинхронизировать.

Операторы и зачем они нужны

  • merge — объединяет два потока: новые actions и события reconnect.
  • scan — хранит состояние очереди как чистая функция (никаких мутаций массива).
  • filter — на flush пропускаем дальше только непустую очередь.
  • concatMap — отправляем actions СТРОГО последовательно. Порядок сохранён.

Подводные камни

  • mergeMap вместо concatMap — параллельная отправка, порядок нарушен.
  • switchMap — следующий reconnect отменит flush, и часть actions не уйдёт.
  • Решите заранее: что делать с ошибкой одного action? Остановить очередь? Перенести в конец очереди для retry? Удалить и логировать? Без решения — неконтролируемое поведение.

Что в итоге получаем

Offline-действия не теряются и уходят на backend в правильном порядке после reconnect.

script.ts // TypeScript
CONSOLE · Console Output
Нажмите на запуск, чтобы увидеть результат...