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:

javascriptlet 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:

javascriptPromise.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:

javascriptPromise.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:

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

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.

Задание 2

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.

Задание 3

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.