PassFront
  1. PassFront
  2. База знаний
  3. Асинхронность и Event Loop

Как выполнить несколько 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, а запускать промисы одновременно.

Другие вопросы раздела