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

Что такое Promise.all?

Асинхронность и Event Loop

`Promise.all` принимает массив промисов и возвращает один промис, который выполняется, когда все входные успешны, или отклоняется, как только любой из них упал.

Поведение

  • Все успешны → результат: массив значений в порядке входа (не в порядке завершения).
  • Хотя бы один упал → немедленный reject с этой ошибкой (fail-fast), остальные не отменяются, но их результат игнорируется.
const [user, posts, comments] = await Promise.all([
  fetch('/user').then((r) => r.json()),
  fetch('/posts').then((r) => r.json()),
  fetch('/comments').then((r) => r.json()),
]);

Когда использовать

  • Несколько независимых запросов, которые можно выполнить параллельно.
  • Нужны все результаты, и при падении любого — общий провал допустим.

Детали

  • Промисы стартуют одновременно (они уже запущены к моменту передачи).
  • Порядок результатов соответствует порядку аргументов.
  • Если падение части терпимо — берут Promise.allSettled.

Частая ошибка

Последовательные await вместо all теряют параллельность:

const a = await fetchA(); // ждём
const b = await fetchB(); // потом ждём — медленно
// быстрее:
const [a2, b2] = await Promise.all([fetchA(), fetchB()]);

Коротко для собеседования

Promise.all ждёт все промисы и даёт массив результатов по порядку входа; при первой же ошибке падает целиком (fail-fast). Используют для параллельных независимых операций.

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