Promise.all(): совместное ожидание всех результатов
Promise.all создаёт обещание, которое успешно завершается после успешного завершения всех переданных операций.
Назначение
Promise.all создаёт обещание, которое успешно завершается после успешного завершения всех переданных операций.
Как это работает
Массив результатов сохраняет порядок входных элементов, а не порядок завершения. При отклонении одной операции общее обещание отклоняется; остальные операции автоматически не отменяются.
Пример
Promise.all([Promise.resolve(3),7,Promise.resolve(5)]).then(values=>{console.assert(JSON.stringify(values)==="[3,7,5]");});
Promise.all([Promise.reject(new Error("demo"))]).catch(error=>{console.assert(error.message==="demo");});
Что должно получиться
Успешная группа возвращает 3, 7 и 5 в исходном порядке. Вторая группа демонстрирует обработку общей ошибки, не выполняя внешних действий.
Граница применения и частая ошибка
Не считайте ошибку Promise.all остановкой уже запущенных запросов. Для отмены нужны механизмы самих операций, а для сбора всех исходов подходит allSettled.
Самостоятельная проверка
Переставьте входные обещания и проверьте порядок результата. Затем добавьте отклонение и убедитесь, что оно обработано, не оставляя необработанного rejection.
JavaScript в песочнице этого сайта не выполняется. Перенесите пример в отдельный учебный файл. Сначала проверьте исходный результат, затем измените входные данные; ошибка проверки означает, что результат отличается от ожидаемого.