Práca s poľom promisov v JavaScript

Teraz si rozoberieme dve užitočné metódy, ktoré umožňujú pracovať s poľom promisov. Metóda Promise.all umožňuje vykonať kód po ukončení všetkých promisov, ktoré sú jej odovzdané vo forme poľa, a metóda Promise.race čaká na načítanie prvého promisu z poľa, pričom zvyšok ignoruje.

Obe metódy svojím výsledkom vracajú nový promis. Pre metódu Promise.all bude výsledkom tohto promisu pole výsledkov všetkých odovzdaných promisov (poradie výsledkov zodpovedá poradiu promisov v poli), a pre Promise.race - výsledok prvého zbehnutého promisu.

Pozrime sa na to v praxi. Predpokladajme, že máme pole promisov:

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

Použitím Promise.all počkajme na ukončenie načítania všetkých promisov z nášho poľa:

javascriptPromise.all(promises).then(function(res) {
  console.log(res); // vypíše [1, 2, 3] - výsledky všetkých promisov
});

A teraz pomocou Promise.race počkajme na ukončenie načítania prvého z promisov:

javascriptPromise.race(promises).then(function(res) {
  console.log(res); // vypíše 1 - výsledok prvého promisu, ktorý sa vykonal
});

Ak bude aspoň jeden z promisov v poli zamietnutý, potom promis s výsledkom okamžite prejde do stavu rejected. Preto vzniknutú výnimku môžete zachytiť bežným, už naučeným spôsobom, napríklad pomocou catch:

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

Vytvorte funkciu, ktorá vráti promis, v ktorom je nastálená náhodná oneskorenie od 1 do 10 sekúnd. Nech svojim výsledkom promis vráti toto oneskorenie. Pomocou cyklu a vašej funkcie naplňte pole 10 promismi.

Задание 2

Použitím poľa promisov z predchádzajúcej úlohy urobte tak, aby sa do konzoly vypísal výsledok prvého promisu, ktorý sa vykonal.

Задание 3

Použitím poľa promisov z predchádzajúcej úlohy urobte tak, aby sa do konzoly vypísal súčet výsledkov všetkých promisov.