Delo z nizi promisov v JavaScript
Zdaj bomo obravnavali dve uporabni metodi,
ki omogočata delo z nizi promisov.
Metoda Promise.all omogoča izvedbo
kode po končanju vseh promisov, ki so ji posredovani
v obliki matrike, metoda Promise.race
pa čaka na nalaganje prvega promisa iz matrike,
zavrže pa ostale.
Obe metodi kot rezultat vrneta nov
promis. Za metodo Promise.all bo rezultat
tega promisa matrika rezultatov vseh
posredovanih promisov (vrstni red rezultatov
ustreza vrstnemu redu promisov v matriki),
za Promise.race pa rezultat prvega
izvedenega promisa.
Poglejmo si to v praksi. Recimo, da imamo matriko promisov:
let promises = [
new Promise(resolve => setTimeout(() => resolve(1), 1000)),
new Promise(resolve => setTimeout(() => resolve(2), 2000)),
new Promise(resolve => setTimeout(() => resolve(3), 3000)),
];
S pomočjo Promise.all počakajmo na
končanje nalaganja vseh promisov iz naše
matrike:
Promise.all(promises).then(function(res) {
console.log(res); // izpiše [1, 2, 3] - rezultati vseh promisov
});
Zdaj pa s pomočjo Promise.race počakajmo na
končanje nalaganja prvega izmed promisov:
Promise.race(promises).then(function(res) {
console.log(res); // izpiše 1 - rezultat prvega izvedenega promisa
});
Če bo vsaj eden od promisov v matriki
zavrnjen, bo promis z rezultatom takoj
prešel v stanje rejected. Zato
nastalo izjemo lahko ujamemo na običajen,
vam že znan način, na primer prek
catch:
Promise.all(promises).then(function(res) {
console.log(res);
}).catch(function(err) {
console.log(err);
});
Naredite funkcijo, ki vrne promis, znotraj
katerega je nastavljena naključna zamuda od
1 do 10 sekund. Naj promis kot svoj
rezultat vrne to zamudo.
S pomočjo zanke in vaše funkcije napolnite
matriko z 10 promisi.
Z uporabo matrike promisov iz prejšnje naloge poskrbite, da se v konzolo izpiše rezultat prvega izvedenega promisa.
Z uporabo matrike promisov iz prejšnje naloge poskrbite, da se v konzolo izpiše vsota rezultatov vseh promisov.