Werken met arrays van promises in JavaScript
Nu analyseren we twee nuttige methoden,
die het mogelijk maken om met arrays van promises te werken.
De methode Promise.all maakt het mogelijk om
code uit te voeren nadat alle promises, die aan hem zijn doorgegeven
in de vorm van een array, zijn voltooid. De methode Promise.race
wacht op de voltooiing van de eerste promise uit de array,
en negeert de rest.
Beide methoden retourneren een nieuwe promise
als hun resultaat. Voor de methode Promise.all zal het resultaat
van deze promise een array zijn met de resultaten van alle
doorgegeven promises (de volgorde van de resultaten
komt overeen met de volgorde van de promises in de array),
en voor Promise.race - het resultaat van de eerste
voltooide promise.
Laten we het in de praktijk bekijken. Stel we hebben een array van promises:
let promises = [
new Promise(resolve => setTimeout(() => resolve(1), 1000)),
new Promise(resolve => setTimeout(() => resolve(2), 2000)),
new Promise(resolve => setTimeout(() => resolve(3), 3000)),
];
Laten we met Promise.all wachten op
de voltooiing van alle promises in onze
array:
Promise.all(promises).then(function(res) {
console.log(res); // geeft [1, 2, 3] weer - de resultaten van alle promises
});
En laten we nu met Promise.race wachten op
de voltooiing van de eerste van de promises:
Promise.race(promises).then(function(res) {
console.log(res); // geeft 1 weer - het resultaat van de eerste voltooide promise
});
Als ten minste één van de promises in de array
wordt afgewezen, zal de promise met het resultaat onmiddellijk
overgaan naar de status rejected. Daarom
kan de opgetreden uitzondering worden opgevangen op de gebruikelijke,
reeds door jou bestudeerde manier, bijvoorbeeld via
catch:
Promise.all(promises).then(function(res) {
console.log(res);
}).catch(function(err) {
console.log(err);
});
Maak een functie die een promise retourneert, waarin
een willekeurige vertraging is ingesteld van
1 tot 10 seconden. Laat de promise
deze vertraging als resultaat retourneren.
Gebruik een lus en je functie om de array te vullen
met 10 promises.
Gebruik de array van promises uit de vorige opdracht en zorg ervoor dat het resultaat van de eerste voltooide promise in de console wordt weergegeven.
Gebruik de array van promises uit de vorige opdracht en zorg ervoor dat de som van de resultaten van alle promises in de console wordt weergegeven.