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:
let 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:
Promise.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:
Promise.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:
Promise.all(promises).then(function(res) {
console.log(res);
}).catch(function(err) {
console.log(err);
});
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.
Pomocí pole promis z předchozí úlohy udělejte to, aby se do konzole vypsal výsledek první provedené promis.
Pomocí pole promis z předchozí úlohy udělejte to, aby se do konzole vypsal součet výsledků všech promis.