Darbība ar promisu masīviem JavaScript
Tagad mēs izanalizēsim divas noderīgas metodes,
kas ļauj strādāt ar promisu masīviem.
Metode Promise.all ļauj izpildīt
kodu pēc visu tam masīvā padoto promisu
pabeigšanas, bet metode Promise.race
gaida pirmā promisa no masīva izpildi,
atmestot pārējos.
Abas metodes ar savu rezultātu atgriež jaunu
promisu. Metodes Promise.all gadījumā
šī promisa rezultāts būs visu padoto promisu
rezultātu masīvs (rezultātu secība
atbilst promisu secībai masīvā),
savukārt Promise.race gadījumā - pirmā
izpildītā promisa rezultāts.
Paskatīsimies praksē. Pieņemsim, ka mums ir promisu masīvs:
let promises = [
new Promise(resolve => setTimeout(() => resolve(1), 1000)),
new Promise(resolve => setTimeout(() => resolve(2), 2000)),
new Promise(resolve => setTimeout(() => resolve(3), 3000)),
];
Izmantosim Promise.all, lai pagaidītu
visu promisu no mūsu masīva ielādi:
Promise.all(promises).then(function(res) {
console.log(res); // izvadīs [1, 2, 3] - visu promisu rezultātus
});
Tagad ar Promise.race palīdzību pagaidīsim
pirmā promisa ielādi:
Promise.race(promises).then(function(res) {
console.log(res); // izvadīs 1 - pirmā izpildījušā promisa rezultātu
});
Ja vismaz viens no promisiem masīvā tiks
noraidīts, tad promiss ar rezultātu nekavējoties
pāries stāvoklī rejected. Tāpēc
radušos izņēmumu var noķert ar jau jums
apgūto, parasto veidu, piemēram, ar
catch palīdzību:
Promise.all(promises).then(function(res) {
console.log(res);
}).catch(function(err) {
console.log(err);
});
Izveidojiet funkciju, kas atgriež promisu, kura iekšienē
iestatīta nejauša aizkave no
1 līdz 10 sekundēm. Lai promiss ar savu
rezultātu atgriež šo aizkavi.
Ar cikla un jūsu funkcijas palīdzību aizpildiet
masīvu ar 10 promisiem.
Izmantojot promisu masīvu no iepriekšējā uzdevuma panāciet, lai konsolē izvadītos pirmā izpildītā promisa rezultāts.
Izmantojot promisu masīvu no iepriekšējā uzdevuma panāciet, lai konsolē izvadītos visu promisu rezultātu summa.