3000 внешних вызовов: цикл с await против Promise.all на всё сразу
Ночная джоба обогащает 3000 заказов данными из внутреннего сервиса. Сейчас так:
for (const order of orders) {
await enrich(order); // ~80 мс: HTTP-вызов + запись в PostgreSQL
}
Джоба идёт около четырёх минут и не укладывается в окно. Разработчик предлагает заменить цикл на await Promise.all(orders.map(enrich)). Что произойдёт и как сделать правильно?
- Скорость вырастет линейно и без побочных эффектов: `Promise.all` сам ограничивает конкурентность размером пула соединений
- Ничего не изменится: операции всё равно выполнятся по очереди, ведь JavaScript-код в Node.js исполняется в одном потоке
- Джоба ускорится, но потеряет часть заказов: `Promise.all` пропускает элементы, которые не успели завершиться вовремя
- Стартуют 3000 одновременных операций: пул БД и внешний сервис захлебнутся; нужна ограниченная конкурентность
