Puna me vargje premtimesh në JavaScript
Tani do të shqyrtojmë dy metoda të dobishme,
që lejojnë punën me vargje premtimesh.
Metoda Promise.all lejon ekzekutimin
e kodit pas përfundimit të të gjitha premtimeve,
të transmetuara në të në formë vargu, ndërsa metoda Promise.race
pret ngarkimin e premtimit të parë nga vargu,
duke hedhur poshtë pjesën tjetër.
Të dy metodat kthejnë si rezultat një
premtim të ri. Për metodën Promise.all rezultati
i këtij premtimi do të jetë një varg i rezultateve të të gjitha
premtimeve të transmetuara (rendi i rezultateve
korrespondon me rendin e premtimeve në varg),
ndërsa për Promise.race - rezultati i parë
i premtimit që funksionoi.
Le të shohim në praktikë. Le të supozojmë se kemi një varg premtimesh:
let promises = [
new Promise(resolve => setTimeout(() => resolve(1), 1000)),
new Promise(resolve => setTimeout(() => resolve(2), 2000)),
new Promise(resolve => setTimeout(() => resolve(3), 3000)),
];
Le të përdorim Promise.all për të pritur
përfundimin e ngarkimit të të gjitha premtimeve nga
vargu ynë:
Promise.all(promises).then(function(res) {
console.log(res); // do të shfaqë [1, 2, 3] - rezultatet e të gjitha premtimeve
});
Dhe tani le të përdorim Promise.race për të pritur
përfundimin e ngarkimit të premtimit të parë:
Promise.race(promises).then(function(res) {
console.log(res); // do të shfaqë 1 - rezultati i premtimit të parë që u ekzekutua
});
Nëse të paktën një nga premtimet në varg do të
refuzohet, atëherë premtimi me rezultat menjëherë
do të kalojë në gjendjen rejected. Prandaj
përjashtimi i lindur mund të kapet në mënyrë të zakonshme,
tashmë të studiuar nga ju, për shembull, përmes
catch:
Promise.all(promises).then(function(res) {
console.log(res);
}).catch(function(err) {
console.log(err);
});
Krijoni një funksion që kthen një premtim, brenda
të cilit është vendosur një vonesë e rastësishme nga
1 deri në 10 sekonda. Le të kthejë si
rezultat i premtimit këtë vonesë.
Duke përdorur ciklin dhe funksionin tuaj, plotësoni
vargun me 10 premtime.
Duke përdorur vargun e premtimeve nga detyra e mëparshme bëni që në konsol të shfaqet rezultati i premtimit të parë që funksionoi.
Duke përdorur vargun e premtimeve nga detyra e mëparshme bëni që në konsol të shfaqet shuma e rezultateve të të gjitha premtimeve.