> Как использовать асинхронные функции при переборе элементов, например в reduce (JavaScript)
Уровень: senior · Роль: frontend · Язык: JavaScript · Категория: Технические вопросы
Компании: TrendTech
Стек: Node.js, JavaScript
> Пример ответа
При работе с асинхронными функциями в reduce нужно помнить, что сам reduce не поддерживает async/await напрямую - коллбэк должен возвращать аккумулятор, а не Promise. Правильный подход - использовать reduce с аккумулятором-промисом, последовательно разрешая каждый шаг.
Пример: допустим, нужно получить данные по каждому ID из массива и накопить результат.
JAVASCRIPTconst ids = [1, 2, 3];async function fetchData(id) {// имитация асинхронного запросаreturn new Promise(resolve => setTimeout(() => resolve({ id, data: `data-${id}` }), 100));}// Последовательное выполнение (каждый следующий ждёт предыдущий)const results = await ids.reduce(async (accPromise, id) => {const acc = await accPromise; // ждём предыдущий аккумуляторconst data = await fetchData(id);acc.push(data);return acc;}, Promise.resolve([]));console.log(results); // [{ id: 1, data: 'data-1' }, ...]
Важно: начальное значение аккумулятора должно быть промисом (Promise.resolve([])), а сам коллбэк - асинхронным. Если нужно параллельное выполнение (все запросы одновременно), лучше использовать Promise.all с map, а не reduce:
JAVASCRIPTconst results = await Promise.all(ids.map(fetchData));
Выбор зависит от задачи: последовательная обработка (например, с зависимостью от предыдущего результата) - reduce с промисами, независимые операции - Promise.all.
> Похожие задачи по JavaScript
Что такое event loop в JavaScript и как он работает с микрозадачами и макрозадачами
Как вы писали модульные и интеграционные тесты
Какие способы оптимизации time to first byte существуют
Какие приоритеты при выборе вакансии
> Похожие задачи по frontend
Какие проверки можно применить к массиву в JSON
Как реализовать функцию каррирования с использованием замыканий в JavaScript
Какие способы оптимизации time to first byte существуют
Какие приоритеты при выборе вакансии
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью