← Назад ко всем вопросам

Что делает Promise.all()

1️⃣ Как кратко ответить

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

2️⃣ Подробное объяснение темы

Promise.all() — это метод, который позволяет работать с несколькими промисами одновременно. Он принимает массив (или любой итерируемый объект) промисов и возвращает новый промис. Этот новый промис разрешается, когда все промисы в массиве разрешены, или отклоняется, если хотя бы один из промисов отклоняется.

Зачем это нужно

Promise.all() полезен, когда необходимо выполнить несколько асинхронных операций параллельно и дождаться их завершения перед выполнением следующего шага. Например, загрузка нескольких ресурсов с сервера, выполнение нескольких запросов к API или выполнение нескольких асинхронных вычислений.

Как это работает

Когда вы вызываете Promise.all() с массивом промисов, он возвращает новый промис. Этот промис:

  • Разрешается с массивом результатов, если все промисы в исходном массиве разрешены.
  • Отклоняется с причиной первого отклоненного промиса, если хотя бы один из промисов отклоняется.

Пример кода

// Создаем три промиса, которые разрешаются через разное время
const promise1 = new Promise((resolve) => setTimeout(() => resolve('Result 1'), 1000));
const promise2 = new Promise((resolve) => setTimeout(() => resolve('Result 2'), 2000));
const promise3 = new Promise((resolve) => setTimeout(() => resolve('Result 3'), 3000));
​
// Используем Promise.all() для ожидания завершения всех промисов
Promise.all([promise1, promise2, promise3])
  .then((results) => {
    // Этот блок выполнится, когда все промисы разрешатся
    console.log(results); // ['Result 1', 'Result 2', 'Result 3']
  })
  .catch((error) => {
    // Этот блок выполнится, если хотя бы один из промисов отклонится
    console.error('One of the promises failed:', error);
  });

Объяснение кода

  1. Создание промисов:

    • promise1, promise2, и promise3 — это три промиса, которые разрешаются через 1, 2 и 3 секунды соответственно. Они используют setTimeout для имитации асинхронной операции.
  2. Promise.all():

    • Promise.all([promise1, promise2, promise3]) создает новый промис, который будет следить за состоянием всех трех промисов.
  3. then():

    • Метод then() вызывается, когда все промисы разрешены. Он получает массив результатов [ 'Result 1', 'Result 2', 'Result 3' ], который соответствует результатам каждого промиса в порядке их передачи в Promise.all().
  4. catch():

    • Метод catch() вызывается, если хотя бы один из промисов отклоняется. В этом случае он получает причину отклонения первого промиса, который отклонился.

Применение

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

Тема: JavaScript
Стадия: Tech

🔒 Подпишись на бусти автора и стань Алигатором, чтобы получить полный доступ к функционалу сайта и отслеживать свой прогресс!

Твои заметки