Darbas su pažadų masyvais JavaScript
Dabar mes išnagrinėsime du naudingus metodus,
leidžiančius dirbti su pažadų masyvais.
Metodas Promise.all leidžia vykdyti
kodą visiems pažadams, perduotiems
jam masyvo pavidalu, pasibaigus, o metodas Promise.race
laukia pirmojo iš masyvo pažado įvykdymo,
atmetant likusius.
Abu metodai savo rezultatu grąžina naują
pažadą. Metodo Promise.all rezultatas
šio pažado bus visų perduotų pažadų rezultatų
masyvas (rezultatų eiliškumas
atitinka pažadų eiliškumą masyve),
o Promise.race - pirmojo
įvykdyto pažado rezultatas.
Pažiūrėkime praktiškai. Tarkime, mes turime pažadų masyvą:
let promises = [
new Promise(resolve => setTimeout(() => resolve(1), 1000)),
new Promise(resolve => setTimeout(() => resolve(2), 2000)),
new Promise(resolve => setTimeout(() => resolve(3), 3000)),
];
Naudodami Promise.all palaukime,
kol bus įvykdyti visi mūsų masyvo
pažadai:
Promise.all(promises).then(function(res) {
console.log(res); // išves [1, 2, 3] - visų pažadų rezultatus
});
O dabar naudodami Promise.race palaukime
pirmojo pažado įvykdymo:
Promise.race(promises).then(function(res) {
console.log(res); // išves 1 - pirmojo įvykdyto pažado rezultatą
});
Jei bent vienas iš masyvo pažadų bus
atmetimas, tai pažadas su rezultatu iškart
pereis į būseną rejected. Todėl
kilusį išimtį galima pagauti įprastu,
jūsų jau išmoktu būdu, pavyzdžiui, per
catch:
Promise.all(promises).then(function(res) {
console.log(res);
}).catch(function(err) {
console.log(err);
});
Sukurkite funkciją, grąžinančią pažadą, kurio viduje
yra nustatyts atsitiktinis delsos laikas nuo
1 iki 10 sekundžių. Tegul savo
rezultatu pažadas grąžina šį delsos laiką.
Naudodamiesi ciklu ir jūsų funkcija užpildykite
masyvą 10 pažadais.
Naudodamiesi pažadų masyvu iš ankstesnės užduoties padarykite taip, kad į konsolę būtų išvestas pirmojo įvykdyti pažado rezultatas.
Naudodamiesi pažadų masyvu iš ankstesnės užduoties padarykite taip, kad į konsolę būtų išvesta visų pažadų rezultatų suma.