Práce s poli promis v JavaScriptu

Nyní si rozebereme dvě užitečné metody, které umožňují pracovat s poli promis. Metoda Promise.all umožňuje spustit kód po dokončení všech promis, které jí byly předány ve formě pole, a metoda Promise.race čeká na načtení první promis z pole, zatímco ostatní zahodí.

Obě metody svým výsledkem vracejí novou promis. Pro metodu Promise.all bude výsledkem této promis pole výsledků všech předaných promis (pořadí výsledků odpovídá pořadí promis v poli), a pro Promise.race - výsledek první z provedených promis.

Podívejme se to v praxi. Předpokládejme, že máme pole promis:

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

Nyní pomocí Promise.all počkejme až se načtou všechny promis z našeho pole:

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

A nyní pomocí Promise.race počkejme až se načte první z promis:

javascriptPromise.race(promises).then(function(res) {
  console.log(res); // vypíše 1 - výsledek první provedené promis
});

Pokud bude alespoň jedna z promis v poli zamítnuta, pak promis s výsledkem okamžitě přejde do stavu rejected. Proto vzniklou výjimku lze zachytit běžným, vám již známým způsobem, například pomocí catch:

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

Vytvořte funkci, vracející promis, uvnitř které je nastaveno náhodné zpoždění od 1 do 10 sekund. Ať svým výsledkem promis vrací toto zpoždění. Pomocí cyklu a vaší funkce naplňte pole 10 promis.

Задание 2

Pomocí pole promis z předchozí úlohy udělejte to, aby se do konzole vypsal výsledek první provedené promis.

Задание 3

Pomocí pole promis z předchozí úlohy udělejte to, aby se do konzole vypsal součet výsledků všech promis.