Назад к вопросам
Middle
68
questionbank

Как работает метод Promise.all в JavaScript?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

Promise.all принимает итерируемый объект (например, массив) с промисами и возвращает новый промис.

Этот новый промис:

  • Переходит в состояние resolved, если все промисы в переданном итерируемом объекте успешно resolved. В этом случае значением является массив результатов всех промисов в том порядке, в котором они были переданы.
  • Переходит в состояние rejected, как только один из промисов в переданном в него итерируемом объекте переходит в состояние rejected. В этом случае значением является причина отклонения первого отклонённого промиса.
  • Если переданный итерируемый объект пуст, возвращаемый промис немедленноresolved с пустым массивом.

Пример:

const promise1 = Promise.resolve(3);
const promise2 = 42; // Не промис, будет обернут в промис
const promise3 = new Promise((resolve, reject) => {
  setTimeout(resolve, 100, 'foo');
});

Promise.all([promise1, promise2, promise3])
  .then((values) => {
    console.log(values); // Выведет: [3, 42, "foo"]
  })
  .catch((error) => {
    console.error(error);
  });

Пример с ошибкой:

const promise4 = Promise.resolve('success');
const promise5 = Promise.reject('error');

Promise.all([promise4, promise5])
  .then((values) => {
    console.log(values); // Не выполнится
  })
  .catch((error) => {
    console.error(error); // Выведет: error
  });