Передавайте предыдущий результат следующей функции и ожидайте её завершения: через for...of с await или цепочку reduce из Promise.
[имя] как выполнить произвольное количество зависимых HTTP-запросов строго последовательно, передавая результат предыдущего запроса следующему? Покажите императивный и функциональный подходы.
Передавайте предыдущий результат следующей функции и ожидайте её завершения: через 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-промисов, последовательное ожидание не сделает их запуск последовательным.