Работа с массивами промисов в 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-ю промисами.

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

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