Работа з масівамі промісаў у JavaScript

Зараз мы з вамі разбяром два карысныя метады, якія дазваляюць працаваць з масівамі промісаў. Метад Promise.all дазваляе выканаць код пасля завяршэння ўсіх промісаў, перададзеных яму ў выглядзе масіва, а метад Promise.race дажыдаецца загрузкі першага проміса з масіва, адкідваючы астатнія.

Абодва метады сваім вынікам вяртаюць новы проміс. Для метаду Promise.all вынікам гэтага проміса будзе масіў вынікаў усіх перададзеных промісаў (парадак вынікаў адпавядае парадку промісаў у масіве), а для Promise.race - вынік першага працаваўшага проміса.

Давайце паглядзім на практыцы. Хай у нас ёсць масіў промісаў:

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

Давайце з дапамогай Promise.all дажывямся завяршэння загрузкі ўсіх промісаў з нашага масіва:

javascriptPromise.all(promises).then(function(res) {
  console.log(res); // выведзе [1, 2, 3] - вынікі ўсіх промісаў
});

А зараз з дапамогай Promise.race дажывямся завяршэння загрузкі першага з промісаў:

javascriptPromise.race(promises).then(function(res) {
  console.log(res); // выведзе 1 - вынік першага выканаўшагася проміса
});

Калі хоць адзін з промісаў у масіве будзе адхілены, то проміс з вынікам адразу ж перайдзе ў стан rejected. Таму ўзнікшае выключэнне можна злавіць звычайным, ужо вывучаным вамі спосабам, напрыклад, праз catch:

javascriptPromise.all(promises).then(function(res) {
  console.log(res);
}).catch(function(err) {
  console.log(err);
});
Задание 1

Зрабіце функцыю, якая вяртае проміс, унутры якой устаноўлена выпадковая затрымка ад 1 да 10 секунд. Хай сваім вынікам проміс вяртае гэтую затрымку. З дапамогай цыклу і вашай функцыі запоўніце масіў 10-ю промісамі.

Задание 2

Выкарыстоўваючы масіў промісаў з папярэдняй задачы зрабіце так, каб у кансоль вывеўся вынік першага працаваўшага проміса.

Задание 3

Выкарыстоўваючы масіў промісаў з папярэдняй задачы зрабіце так, каб у кансоль вывелася сума вынікаў усіх промісаў.