> Как работает Promise.all в JavaScript (JavaScript)

Уровень: senior · Роль: frontend · Категория: Технические вопросы

Компании: Cyber Interactive, РСХБ, IT-One, Библио-Глобус, TYMY, Яндекс

Стек: JavaScript

> Пример ответа

Promise.all - это статический метод, который принимает итерируемый объект (чаще всего массив) промисов и возвращает один промис. Этот результирующий промис разрешается массивом значений исходных промисов в том же порядке, в котором они были переданы, только когда все переданные промисы завершатся успешно. Если хотя бы один промис отклоняется (reject), то Promise.all немедленно отклоняется с причиной первого отклонённого промиса - это поведение называется "fail-fast".

Пример использования:

JAVASCRIPT
const promise1 = Promise.resolve(1);
const promise2 = new Promise((resolve) => setTimeout(() => resolve(2), 100));
const promise3 = fetch('/data').then(res => res.json());
Promise.all([promise1, promise2, promise3])
.then(([result1, result2, result3]) => {
console.log(result1, result2, result3);
})
.catch(error => {
console.error('Один из промисов упал:', error);
});

Важные нюансы:

  • Если передан пустой массив, Promise.all разрешается немедленно с пустым массивом.

  • Если любой элемент не является промисом, он оборачивается в Promise.resolve().

  • Из-за "fail-fast" другие промисы не отменяются, они продолжают выполняться, но их результаты игнорируются.

  • Для обработки всех результатов, включая ошибки, используйте Promise.allSettled.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью