BACK
Уроки52. Project: последовательные запросы
Уроки · 52

52. Project: последовательные запросы

Проект 4 — последовательная загрузка

Реальный кейс: загрузить профиль пользователя, потом по этому пользователю — его заказы, потом по заказам — итог. Эти шаги зависят друг от друга, и порядок важен сильнее, чем скорость.

Особенность теста

Заметьте: второй шаг orders по времени быстрее первого user (10мс vs 50мс). Если бы вы взяли mergeMap, orders пришёл бы раньше. concatMap гарантирует строгий порядок.

Что нужно сделать

  1. В loadSequentially$ внутри pipe добавьте concatMap(step => loadStep(step)).
  2. Порядок результата: user → orders → total.

Детерминированная проверка

В этой задаче проверка идет через виртуальное время TestScheduler. Если решение верное, в консоли появится только Test Passed!. Не добавляйте лишние console.log, иначе проверка провалится.

Решение spoiler · click to reveal
const { from, concatMap } = Rx;

function loadSequentially$(steps, loadStep) {
  return from(steps).pipe(
    concatMap(step => loadStep(step))
  );
}
script.ts // TypeScript
CONSOLE · Console Output
Нажмите на запуск, чтобы увидеть результат...