Rad sa nizovima promisa u JavaScript
Sada ćemo razmotriti dve korisne metode,
koje omogućavaju rad sa nizovima promisa.
Metoda Promise.all omogućava izvršenje
koda po završetku svih promisa, prosleđenih
joj u vidu niza, a metoda Promise.race
čeka učitavanje prvog promisa iz niza,
odbacujući ostale.
Obe metode svojim rezultatom vraćaju novi
promis. Za metodu Promise.all rezultat
tog promisa će biti niz rezultata svih
prosledjenih promisa (redosled rezultata
odgovara redosledu promisa u nizu),
a za Promise.race - rezultat prvog
aktiviranog promisa.
Hajde da pogledamo u praksi. Recimo da imamo niz promisa:
let promises = [
new Promise(resolve => setTimeout(() => resolve(1), 1000)),
new Promise(resolve => setTimeout(() => resolve(2), 2000)),
new Promise(resolve => setTimeout(() => resolve(3), 3000)),
];
Hajde da pomoću Promise.all sačekamo
završetak učitavanja svih promisa iz našeg
niza:
Promise.all(promises).then(function(res) {
console.log(res); // ispisaće [1, 2, 3] - rezultati svih promisa
});
A sada pomoću Promise.race sačekajmo
završetak učitavanja prvog od promisa:
Promise.race(promises).then(function(res) {
console.log(res); // ispisaće 1 - rezultat prvog izvršenog promisa
});
Ako je bar jedan od promisa u nizu
odbijen, onda će promis sa rezultatom odmah
preći u stanje rejected. Zato
nastali izuzetak možete uhvatiti uobičajenim,
već od vas naučenim načinom, na primer, preko
catch:
Promise.all(promises).then(function(res) {
console.log(res);
}).catch(function(err) {
console.log(err);
});
Napravite funkciju, koja vraća promis, unutar
kojeg je postavljeno slučajno kašnjenje od
1 do 10 sekundi. Neka svojim
rezultatom promis vraća to kašnjenje.
Pomoću petlje i vaše funkcije popunite
niz sa 10 promisa.
Koristeći niz promisa iz prethodnog zadatka učinite tako da se u konzolu ispiše rezultat prvog aktiviranog promisa.
Koristeći niz promisa iz prethodnog zadatka učinite tako da se u konzolu ispiše zbir rezultata svih promisa.