Rad sa nizovima promisa u JavaScript

Sada ćemo razmotriti dve korisne metode, koje omogućavaju rad sa nizovima promisa. Metoda Promise.all omogućava izvršenje koda po završetku svih promisa, prosleđenih joj u vidu niza, a metoda Promise.race čeka učitavanje prvog promisa iz niza, odbacujući ostale.

Obe metode svojim rezultatom vraćaju novi promis. Za metodu Promise.all rezultat tog promisa će biti niz rezultata svih prosledjenih promisa (redosled rezultata odgovara redosledu promisa u nizu), a za Promise.race - rezultat prvog aktiviranog promisa.

Hajde da pogledamo u praksi. Recimo da imamo niz promisa:

javascriptlet promises = [
  new Promise(resolve => setTimeout(() => resolve(1), 1000)),
  new Promise(resolve => setTimeout(() => resolve(2), 2000)),
  new Promise(resolve => setTimeout(() => resolve(3), 3000)),
];

Hajde da pomoću Promise.all sačekamo završetak učitavanja svih promisa iz našeg niza:

javascriptPromise.all(promises).then(function(res) {
  console.log(res); // ispisaće [1, 2, 3] - rezultati svih promisa
});

A sada pomoću Promise.race sačekajmo završetak učitavanja prvog od promisa:

javascriptPromise.race(promises).then(function(res) {
  console.log(res); // ispisaće 1 - rezultat prvog izvršenog promisa
});

Ako je bar jedan od promisa u nizu odbijen, onda će promis sa rezultatom odmah preći u stanje rejected. Zato nastali izuzetak možete uhvatiti uobičajenim, već od vas naučenim načinom, na primer, preko catch:

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

Napravite funkciju, koja vraća promis, unutar kojeg je postavljeno slučajno kašnjenje od 1 do 10 sekundi. Neka svojim rezultatom promis vraća to kašnjenje. Pomoću petlje i vaše funkcije popunite niz sa 10 promisa.

Задание 2

Koristeći niz promisa iz prethodnog zadatka učinite tako da se u konzolu ispiše rezultat prvog aktiviranog promisa.

Задание 3

Koristeći niz promisa iz prethodnog zadatka učinite tako da se u konzolu ispiše zbir rezultata svih promisa.