Как выполнить несколько Promise одновременно?
Асинхронность и Event Loop
Несколько промисов выполняют одновременно с помощью комбинаторов `Promise.all`, `Promise.allSettled`, `Promise.race` и `Promise.any`. Промисы стартуют параллельно, а комбинатор задаёт, как дождаться результата.
Параллельный запуск
Промисы уже выполняются к моменту передачи в комбинатор — они не «запускаются» им, а лишь агрегируются:
// Параллельно
const [a, b] = await Promise.all([fetchA(), fetchB()]);
// Последовательно (медленнее!)
const a2 = await fetchA();
const b2 = await fetchB();Комбинаторы
- Promise.all — все успешны → массив результатов; любой упал → reject (fail-fast).
- Promise.allSettled — ждёт все, возвращает статусы
{status, value|reason}, не падает. - Promise.race — первый завершившийся (успех или ошибка) — для таймаутов.
- Promise.any — первый успешный; все упали →
AggregateError.
const results = await Promise.allSettled([fetchA(), fetchB()]);Как выбирать
- Нужны все, fail-fast → all.
- Нужны все, но терпимы ошибки → allSettled.
- Достаточно первого → race / any.
Коротко для собеседования
Несколько промисов выполняют параллельно через Promise.all (все или fail-fast), allSettled (все со статусами), race (первый завершённый), any (первый успешный). Ключ — не делать последовательные await, а запускать промисы одновременно.