⊗jsSpPrmAr 170 of 294 menu

Работа с масиви от промисове в JavaScript

Сега ще разгледаме два полезни метода, които позволяват работа с масиви от промисове. Методът Promise.all позволява изпълнение на код след приключване на всички промисове, подадени му под формата на масив, а методът Promise.race изчаква зареждането на първия промис от масива, игнорирайки останалите.

И двата метода връщат нов промис като резултат. За метода Promise.all резултатът от този промис ще бъде масив от резултатите на всички подадени промисове (редът на резултатите съответства на реда на промисовете в масива), а за Promise.race - резултатът от първия завършил промис.

Нека да разгледаме на практика. Да предположим, че имаме масив от промисове:

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

Нека с помощта на Promise.all изчакаме завършването на всички промисове от нашия масив:

Promise.all(promises).then(function(res) { console.log(res); // ще изведе [1, 2, 3] - резултатите от всички промисове });

А сега с помощта на Promise.race изчакаме завършването на първия от промисовете:

Promise.race(promises).then(function(res) { console.log(res); // ще изведе 1 - резултатът от първия завършил промис });

Ако поне един от промисовете в масива бъде отхвърлен, то промисът с резултата веднага ще премине в състояние rejected. Следователно възникналото изключение може да бъде уловено по обичайния, вече изучен от вас начин, например, чрез catch:

Promise.all(promises).then(function(res) { console.log(res); }).catch(function(err) { console.log(err); });

Направете функция, която връща промис, вътре в който е зададена случайна забавяка от 1 до 10 секунди. Нека своя резултат промисът връща тази забавяка. С помощта на цикъл и вашата функция попълнете масив с 10 промиса.

Използвайки масива от промисове от предходната задача направете така, че в конзолата да се изведе резултатът от първия завършил промис.

Използвайки масива от промисове от предходната задача направете така, че в конзолата да се изведе сумата от резултатите на всички промисове.

Български
AfrikaansAzərbaycanবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Ние използваме бисквитки за работата на сайта, анализ и персонализация. Обработката на данни се извършва в съответствие с Политика за поверителност.
приемам всички настройки отхвърляне