Arbeid med array av promises i JavaScript
Nå skal vi gå gjennom to nyttige metoder,
som lar oss arbeide med array av promises.
Metoden Promise.all lar oss kjøre
kode etter at alle promises, sendt til
den i form av et array, er fullført,
mens metoden Promise.race
venter på at den første promise i arrayet skal fullføres,
og forkaster de andre.
Begge metodene returnerer et nytt
promise som sitt resultat. For metoden Promise.all vil resultatet
av dette promise være et array med resultatene fra alle
de sendte promises (rekkefølgen på resultatene
samsvarer med rekkefølgen på promises i arrayet),
mens for Promise.race - resultatet fra den første
fulførte promise.
La oss se på det i praksis. La oss si at vi har et array med promises:
let promises = [
new Promise(resolve => setTimeout(() => resolve(1), 1000)),
new Promise(resolve => setTimeout(() => resolve(2), 2000)),
new Promise(resolve => setTimeout(() => resolve(3), 3000)),
];
La oss ved hjelp av Promise.all vente på at
alle promises i vårt array er fullført:
Promise.all(promises).then(function(res) {
console.log(res); // vil skrive ut [1, 2, 3] - resultatene fra alle promises
});
Og la oss nå ved hjelp av Promise.race vente på at
den første av promises er fullført:
Promise.race(promises).then(function(res) {
console.log(res); // vil skrive ut 1 - resultatet fra den første fulfilled promise
});
Hvis minst én av promises i arrayet blir
avvist, vil promise med resultatet umiddelbart
gå til tilstanden rejected. Derfor
kan unntaket som oppstår fanges på vanlig
måte, som du allerede har lært, for eksempel via
catch:
Promise.all(promises).then(function(res) {
console.log(res);
}).catch(function(err) {
console.log(err);
});
Lag en funksjon som returnerer et promise, inni
som det er satt en tilfeldig forsinkelse fra
1 til 10 sekunder. La promise
returnere denne forsinkelsen som sitt resultat.
Ved hjelp av en løkke og din funksjon, fyll
arrayet med 10 promises.
Bruk arrayet med promises fra forrige oppgave og gjør slik at resultatet fra den første fulførte promise skrives ut i konsollen.
Bruk arrayet med promises fra forrige oppgave og gjør slik at summen av resultatene fra alle promises skrives ut i konsollen.