Práca s poľom promisov v JavaScript
Teraz si rozoberieme dve užitočné metódy,
ktoré umožňujú pracovať s poľom promisov.
Metóda Promise.all umožňuje vykonať
kód po ukončení všetkých promisov, ktoré sú
jej odovzdané vo forme poľa, a metóda Promise.race
čaká na načítanie prvého promisu z poľa,
pričom zvyšok ignoruje.
Obe metódy svojím výsledkom vracajú nový
promis. Pre metódu Promise.all bude výsledkom
tohto promisu pole výsledkov všetkých
odovzdaných promisov (poradie výsledkov
zodpovedá poradiu promisov v poli),
a pre Promise.race - výsledok prvého
zbehnutého promisu.
Pozrime sa na to v praxi. Predpokladajme, že máme pole promisov:
let promises = [
new Promise(resolve => setTimeout(() => resolve(1), 1000)),
new Promise(resolve => setTimeout(() => resolve(2), 2000)),
new Promise(resolve => setTimeout(() => resolve(3), 3000)),
];
Použitím Promise.all počkajme na
ukončenie načítania všetkých promisov z nášho
poľa:
Promise.all(promises).then(function(res) {
console.log(res); // vypíše [1, 2, 3] - výsledky všetkých promisov
});
A teraz pomocou Promise.race počkajme na
ukončenie načítania prvého z promisov:
Promise.race(promises).then(function(res) {
console.log(res); // vypíše 1 - výsledok prvého promisu, ktorý sa vykonal
});
Ak bude aspoň jeden z promisov v poli
zamietnutý, potom promis s výsledkom okamžite
prejde do stavu rejected. Preto
vzniknutú výnimku môžete zachytiť bežným,
už naučeným spôsobom, napríklad pomocou
catch:
Promise.all(promises).then(function(res) {
console.log(res);
}).catch(function(err) {
console.log(err);
});
Vytvorte funkciu, ktorá vráti promis, v ktorom
je nastálená náhodná oneskorenie od
1 do 10 sekúnd. Nech svojim
výsledkom promis vráti toto oneskorenie.
Pomocou cyklu a vašej funkcie naplňte
pole 10 promismi.
Použitím poľa promisov z predchádzajúcej úlohy urobte tak, aby sa do konzoly vypísal výsledok prvého promisu, ktorý sa vykonal.
Použitím poľa promisov z predchádzajúcej úlohy urobte tak, aby sa do konzoly vypísal súčet výsledkov všetkých promisov.