Promise.all
Ждёт выполнения всех промисов параллельно.
Доступно с: ES2015
Синтаксис
Promise.all(promises)Параметры
| Параметр | Тип | Описание |
|---|---|---|
| promises | Iterable | Массив промисов (или обычных значений). |
Возвращаемое значение
PromiseПромис массива результатов в том же порядке — или первая ошибка.
Примеры
Параллельная загрузка:
const wait = (ms, value) => new Promise((resolve) => setTimeout(() => resolve(value), ms));
const [user, orders] = await Promise.all([wait(100, 'Anna'), wait(50, 3)]);
console.log(user, orders);Результат:
Anna 3Одна ошибка — и весь Promise.all отклонён:
try {
await Promise.all([Promise.resolve(1), Promise.reject(new Error('Failed')), Promise.resolve(3)]);
} catch (error) {
console.log(error.message);
}Результат:
FailedПримечания
Порядок результатов совпадает с порядком промисов, а не с тем, какой завершился раньше. Общее время равно времени самого долгого промиса, а не их сумме.
Если нужно получить результаты даже при ошибках, используйте Promise.allSettled().
См. также
- Promise.allSettled — Ждёт завершения всех промисов и сообщает результат каждого — успех или ошибку.
- Promise.race — Возвращает результат первого завершившегося промиса — успешного или нет.
- Promise.any — Возвращает первый успешный результат, ошибки пропускает.
- await — Ждёт результата промиса и возвращает его значение.
Вопросы и ответы по теме
В учебнике
- Несколько промисов сразу — Promise.all, Promise.allSettled, Promise.race и Promise.any в JavaScript: как ждать несколько асинхронных действий одновременно.