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:

javascriptlet 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:

javascriptPromise.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:

javascriptPromise.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:

javascriptPromise.all(promises).then(function(res) {
  console.log(res);
}).catch(function(err) {
  console.log(err);
});
Задание 1

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.

Задание 2

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.

Задание 3

Brug arrayet af promises fra den forrige opgave og gør sådan, at summen af resultaterne af alle promises udskrives i konsollen.