# Работа с массивами промисов в JavaScript

Сейчас мы с вами разберем два полезных метода, позволяющих работать с массивами промисов. Метод `Promise.all` позволяет выполнить код по окончанию всех промисов, переданных ему в виде массива, а метод `Promise.race` дожидается загрузки первого промиса из массива, отбрасывая остальные.

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

Давайте посмотрим на практике. Пусть у нас есть массив промисов:

`let promises = [ new Promise(resolve => setTimeout(() => resolve(1), 1000)), new Promise(resolve => setTimeout(() => resolve(2), 2000)), new Promise(resolve => setTimeout(() => resolve(3), 3000)), ];`

Давайте с помощью `Promise.all` дождемся окончания загрузки всех промисов из нашего массива:

`Promise.all(promises).then(function(res) { console.log(res); // выведет [1, 2, 3] - результаты всех промисов });`

А теперь с помощью `Promise.race` дождемся окончания загрузки первого из промисов:

`Promise.race(promises).then(function(res) { console.log(res); // выведет 1 - результат первого выполнившегося промиса });`

Если хотя бы один из промисов в массиве будет отклонен, то промис с результатом сразу же перейдет в состояние `rejected`. Поэтому возникшее исключение можно поймать обычным, уже изученным вами способом, например, через `catch`:

`Promise.all(promises).then(function(res) { console.log(res); }).catch(function(err) { console.log(err); });`

Сделайте функцию, возвращающую промис, внутри которого установлена случайная задержка от `1` до `10` секунд. Пусть своим результатом промис возвращает эту задержку. С помощью цикла и вашей функции заполните массив `10`-ю промисами.

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

Используя массив промисов из предыдущей задачи сделайте так, чтобы в консоль вывелась сумма результатов всех промисов.

← →
↑
en ru