Arbejde med arrays af promises i JavaScript
Nu vil vi analysere to nyttige metoder,
der giver mulighed for at arbejde med arrays af promises.
Metoden Promise.all tillader at udføre
kode efter afslutningen af alle promises, overført
til det i form af et array, og metoden Promise.race
venter på indlæsningen af den første promise fra arrayet,
hvor den kasserer resten.
Begge metoder returnerer en ny promise
som deres resultat. For metoden Promise.all vil resultatet
af denne promise være et array med resultaterne af alle
de overførte promises (rækkefølgen af resultater
svarer til rækkefølgen af promises i arrayet),
og for Promise.race - resultatet af den første
udførte promise.
Lad os se på det i praksis. Antag, at vi har et array af promises:
let promises = [
new Promise(resolve => setTimeout(() => resolve(1), 1000)),
new Promise(resolve => setTimeout(() => resolve(2), 2000)),
new Promise(resolve => setTimeout(() => resolve(3), 3000)),
];
Lad os ved hjælp af Promise.all vente på
afslutningen af indlæsningen af alle promises fra vores
array:
Promise.all(promises).then(function(res) {
console.log(res); // vil udskrive [1, 2, 3] - resultaterne af alle promises
});
Og lad os nu ved hjælp af Promise.race vente på
afslutningen af indlæsningen af den første af promises:
Promise.race(promises).then(function(res) {
console.log(res); // vil udskrive 1 - resultatet af den første udførte promise
});
Hvis mindst én af promises i arrayet
bliver afvist, vil promise med resultatet straks
gå over til tilstanden rejected. Derfor
kan den opståede undtagelse fanges på en sædvanlig,
allerede studeret af dig, måde, for eksempel via
catch:
Promise.all(promises).then(function(res) {
console.log(res);
}).catch(function(err) {
console.log(err);
});
Lav en funktion, der returnerer en promise, inde i
hvilken der er indstillet en tilfældig forsinkelse fra
1 til 10 sekunder. Lad promise som sit
resultat returnere denne forsinkelse.
Brug en løkke og din funktion til at fylde
et array med 10 promises.
Brug arrayet af promises fra den forrige opgave og gør sådan, at resultatet af den første udførte promise udskrives i konsollen.
Brug arrayet af promises fra den forrige opgave og gør sådan, at summen af resultaterne af alle promises udskrives i konsollen.