[имя] как выполнить произвольное количество зависимых HTTP-запросов строго последовательно, передавая результат предыдущего запроса следующему? Покажите императивный и функциональный подходы.

Передавайте предыдущий результат следующей функции и ожидайте её завершения: через for...of с await или цепочку reduce из Promise.

Короткий ответ

Что ответить на собеседовании

Передавайте предыдущий результат следующей функции и ожидайте её завершения: через for...of с await или цепочку reduce из Promise.

Подробный разбор

Ответ с пояснениями

Передавайте предыдущий результат следующей функции и ожидайте её завершения: через for...of с await или цепочку reduce из Promise.

steps — массив функций, запускающих запрос только при вызове:

async function sequential(steps, initial) {
  let value = initial;
  for (const step of steps) value = await step(value);
  return value;
}
function sequentialReduce(steps, initial) {
  return steps.reduce(
    (chain, step) => chain.then(value => step(value)),
    Promise.resolve(initial)
  );
}

Пустой массив возвращает initial. Ошибка останавливает цепочку. Если заранее создать массив уже запущенных HTTP-промисов, последовательное ожидание не сделает их запуск последовательным.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее