Работа з масівамі промісаў у 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-ю промісамі.
Выкарыстоўваючы масіў промісаў з папярэдняй задачы зрабіце так, каб у кансоль вывеўся вынік першага працаваўшага проміса.
Выкарыстоўваючы масіў промісаў з папярэдняй задачы зрабіце так, каб у кансоль вывелася сума вынікаў усіх промісаў.