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

Дожидается ли метод Promise.all выполнения всех Promise

1.3 Junior🔥 261 комментариев
#JavaScript Core

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI26 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Да, Promise.all дожидается выполнения всех Promise

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

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

const promise1 = fetch("/api/users");
const promise2 = fetch("/api/posts");
const promise3 = fetch("/api/comments");

Promise.all([promise1, promise2, promise3])
  .then(results => {
    console.log("Все запросы завершены", results);
  })
  .catch(error => {
    console.error("Хотя бы один Promise отклонен", error);
  });

Ключевые особенности

1. Параллельное выполнение

  • Все Promise начинают выполняться одновременно
  • Promise.all не запускает их последовательно
  • Это значительно быстрее чем последовательное ожидание

2. Ожидание всех результатов

  • Возвращаемый Promise разрешится только когда все входящие Promise выполнены
  • Если один выполняется за 1сек, а другой за 5сек, Promise.all ждет 5 секунд
  • Результаты возвращаются в массиве в том же порядке

3. Обработка ошибок (fail-fast поведение)

  • Если хотя бы один Promise отклонен, весь Promise.all отклоняется
  • Возвращается ошибка первого отклоненного Promise
  • Остальные Promise продолжают выполняться в фоне
const promises = [
  Promise.resolve(1),
  Promise.reject(new Error("Ошибка")),
  Promise.resolve(3)
];

Promise.all(promises)
  .catch(error => console.log("Ошибка:", error.message));

Реальный пример с async/await

async function loadUserDashboard(userId: string) {
  try {
    const [user, posts, friends] = await Promise.all([
      fetch(`/api/users/${userId}`).then(r => r.json()),
      fetch(`/api/users/${userId}/posts`).then(r => r.json()),
      fetch(`/api/users/${userId}/friends`).then(r => r.json())
    ]);
    
    return { user, posts, friends };
  } catch (error) {
    console.error("Ошибка при загрузке", error);
  }
}

Альтернативы

  • Promise.allSettled() — не отклоняется при ошибке, возвращает статус каждого
  • Promise.race() — возвращает результат первого выполненного Promise
  • Promise.any() — возвращает первый успешный Promise

Итог

Promise.all — это идеальный выбор для параллельного выполнения нескольких асинхронных операций, когда вам нужны результаты всех перед продолжением. Это быстро, надежно и удобно в использовании с async/await синтаксисом.

Дожидается ли метод Promise.all выполнения всех Promise | PrepBro