← Назад к вопросам
Дожидается ли метод 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 синтаксисом.