Use cases/Submit queue — отправки строго по порядку
Use cases · 16 学
Submit queue — отправки строго по порядку
Паттерн
Не путать с защитой от двойного клика! Здесь каждый submit важен — это разные заявки, шаги мастера, отдельные команды админки. Все они должны уйти на сервер, причём в том же порядке, в котором их отправил пользователь.
Какую проблему решаем
Если использовать exhaustMap (защита от двойной отправки) — мы потеряем важные команды. Если switchMap — отменим предыдущую отправку, что катастрофично для mutate-запросов. Если mergeMap — отправим параллельно, и backend получит их в случайном порядке.
Операторы и зачем они нужны
concatMap — подписывается на следующий запрос только после complete предыдущего. Это и есть очередь.
timer + map — имитируют сетевой запрос для демонстрации.
Подводные камни
exhaustMap подходит для кнопки «Заплатить» (защита от дублей), но потеряет важные submit-события в очереди.
switchMap отменит предыдущую отправку — нельзя использовать для mutate-запросов, которые уже могли частично сохраниться.
Если внутри concatMap прилетит error — вся очередь умрёт. В production добавляйте catchError на уровне каждого item.
Что в итоге получаем
Все submit-команды доходят до сервера один за другим, в точном порядке появления. Ничего не теряется и не путается.