BACK
Use casesDependent HTTP chain — запрос зависит от ответа
Use cases · 24

Dependent HTTP chain — запрос зависит от ответа

Паттерн

Чтобы загрузить permissions, нужен user.id из первого запроса. Чтобы загрузить dashboard, нужен permission.scope из второго. Параллельно никак — последовательная цепочка.

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

Императивно это превращается в pyramid of subscribes: subscribe внутри subscribe внутри subscribe. Отмена при смене route разваливается — старая цепочка продолжает выполняться. Обработка ошибок размазана по всем уровням.

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

  • switchMap — передаёт результат предыдущего запроса в следующий, и отменяет всю цепочку при новом верхнем триггере (например, смене id в URL).
  • map — собирает финальный ответ в нужный VM.
  • catchError — обрабатывает сбой ЛЮБОГО этапа цепочки в одном месте.

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

  • mergeMap — при смене триггера (новый id в URL) старая цепочка продолжит работать параллельно новой. Хаос с ответами.
  • forkJoin здесь нельзя — второй запрос не знает свой параметр заранее, нужно сначала дождаться первого.
  • catchError в середине цепочки — поймаете ошибку и отправите следующий запрос с дефолтными значениями. Будет ехать поезд без рельс.

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

Зависимая загрузка превращается в один Observable с прозрачным контрактом success/error. Отмена работает атомарно на всю цепочку.

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