Promise tömbök kezelése JavaScriptben
Most két hasznos módszert fogunk megvizsgálni,
amelyek lehetővé teszik promise tömbökkel való munkát.
A Promise.all módszer lehetővé teszi
a kód végrehajtását az összes, tömb formájában
átadott promise befejezése után, míg a Promise.race
módszer megvárja a tömbből az első promise betöltését,
és elveti a többit.
Mindkét módszer egy új promise-t ad vissza eredményül.
A Promise.all módszer esetén ennek a promise-nak
az eredménye az összes átadott promise eredményeinek
tömbje lesz (az eredmények sorrendje megfelel
a promise-ok tömbbeli sorrendjének),
míg a Promise.race esetén - az első
lefutott promise eredménye.
Nézzük a gyakorlatban. Tegyük fel, hogy van egy promise tömbünk:
let promises = [
new Promise(resolve => setTimeout(() => resolve(1), 1000)),
new Promise(resolve => setTimeout(() => resolve(2), 2000)),
new Promise(resolve => setTimeout(() => resolve(3), 3000)),
];
Várjuk meg a Promise.all segítségével
a tömbünkben lévő összes promise betöltésének
befejeződését:
Promise.all(promises).then(function(res) {
console.log(res); // kiírja [1, 2, 3] - az összes promise eredménye
});
Most pedig a Promise.race segítségével várjuk meg
az első promise betöltésének befejeződését:
Promise.race(promises).then(function(res) {
console.log(res); // kiírja 1 - az első teljesített promise eredménye
});
Ha a tömbben lévő promise-ok közül legalább egy
elutasításra kerül, akkor az eredmény promise azonnal
rejected állapotba kerül. Ezért
a keletkezett kivételt a szokásos, általatok már
megismert módon elkaphatjátok, például a
catch segítségével:
Promise.all(promises).then(function(res) {
console.log(res);
}).catch(function(err) {
console.log(err);
});
Készítsen egy függvényt, amely promise-t ad vissza, melynek belsejében
van egy véletlenszerű késleltetés
1 és 10 másodperc között. Legyen a promise
eredménye ez a késleltetés.
Ciklus és a függvénye segítségével töltse fel
a tömböt 10 promise-szal.
Az előző feladat promise tömbjét felhasználva érje el, hogy a konzolba az első lefutott promise eredménye kerüljön kiírásra.
Az előző feladat promise tömbjét felhasználva érje el, hogy a konzolba az összes promise eredményeinek összege kerüljön kiírásra.