Arbeta med arrayer av promiser i JavaScript
Nu ska vi gå igenom två användbara metoder
som låter dig arbeta med arrayer av promiser.
Metoden Promise.all låter dig köra
kod när alla promiser som skickats till
den i form av en array är klara, medan metoden Promise.race
väntar på att den första promisen i arrayen ska laddas klart,
och ignorerar resten.
Båda metoderna returnerar en ny promise
som sitt resultat. För metoden Promise.all blir resultatet
av denna promise en array med resultaten från alla
skickade promiser (ordningen på resultaten
motsvarar ordningen på promiserna i arrayen),
medan för Promise.race blir det resultatet från den första
avslutade promisen.
Låt oss se på ett praktiskt exempel. Antag att vi har en array med promiser:
let promises = [
new Promise(resolve => setTimeout(() => resolve(1), 1000)),
new Promise(resolve => setTimeout(() => resolve(2), 2000)),
new Promise(resolve => setTimeout(() => resolve(3), 3000)),
];
Låt oss använda Promise.all för att vänta
tills alla promiser i vår array har laddats klart:
Promise.all(promises).then(function(res) {
console.log(res); // kommer att skriva ut [1, 2, 3] - resultaten från alla promiser
});
Och låt oss nu använda Promise.race för att vänta
tills den första av promiserna har laddats klart:
Promise.race(promises).then(function(res) {
console.log(res); // kommer att skriva ut 1 - resultatet från den första avslutade promisen
});
Om minst en av promiserna i arrayen
avvisas, kommer promisen med resultatet omedelbart
att övergå till tillståndet rejected. Därför
kan det uppkomna undantaget fångas på ett vanligt,
redan av dig studerat sätt, till exempel via
catch:
Promise.all(promises).then(function(res) {
console.log(res);
}).catch(function(err) {
console.log(err);
});
Skapa en funktion som returnerar en promise, inuti
vars en slumpmässig fördröjning från
1 till 10 sekunder är inställd. Låt promisen
returnera denna fördröjning som sitt resultat.
Med hjälp av en loop och din funktion, fyll
arrayen med 10 promiser.
Använd arrayen med promiser från den föregående uppgiften och gör så att resultatet från den första avslutade promisen skrivs ut i konsolen.
Använd arrayen med promiser från den föregående uppgiften och gör så att summan av resultaten från alla promiser skrivs ut i konsolen.