JavaScript-ում պրոմիսների զանգվածների հետ աշխատանք

Այժմ մենք կվերլուծենք երկու օգտակար մեթոդ, որոնք թույլ են տալիս աշխատել պրոմիսների զանգվածների հետ: Promise.all մեթոդը թույլ է տալիս կատարել կոդը բոլոր պրոմիսների ավարտից հետո, որոնք փոխանցվել են նրան զանգվածի տեսքով, իսկ Promise.race մեթոդը սպասում է զանգվածից առաջին պրոմիսի բեռնավորմանը, մերժելով մնացածները:

Երկու մեթոդներն էլ իրենց արդյունքում վերադարձնում են նոր պրոմիս: Promise.all մեթոդի համար այս պրոմիսի արդյունքը կլինի բոլոր փոխանցված պրոմիսների արդյունքների զանգված (արդյունքների հերթականությունը համապատասխանում է պրոմիսների հերթականությանը զանգվածում), իսկ Promise.race-ի համար՝ առաջին աշխատած պրոմիսի արդյունքը:

Եկեք տեսնենք գործնականում: Ենթադրենք, որ մենք ունենք պրոմիսների զանգված:

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

Եկեք օգտագործենք Promise.all-ը՝ սպասելու մեր զանգվածի բոլոր պրոմիսների բեռնավորման ավարտին:

javascriptPromise.all(promises).then(function(res) {
  console.log(res); // կարտածի [1, 2, 3] - բոլոր պրոմիսների արդյունքները
});

Իսկ այժմ օգտագործենք Promise.race-ը՝ սպասելու պրոմիսներից առաջինի բեռնավորման ավարտին:

javascriptPromise.race(promises).then(function(res) {
  console.log(res); // կարտածի 1 - առաջին ավարտված պրոմիսի արդյունքը
});

Եթե պրոմիսների զանգվածից գոնե մեկը կմերժվի, ապա արդյունքով պրոմիսը անմիջապես կանցնի rejected վիճակի: Ուստի առաջացած բացառությունը կարելի է բռնել սովորական, արդեն ձեր կողմից ուսումնասիրված եղանակով, օրինակ՝ օգտագործելով catch:

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

Ստեղծեք ֆունկցիա, որն վերադարձնում է պրոմիս, որի ներսում սահմանված է պատահական ուշացում 1-ից մինչև 10 վայրկյան: Թող պրոմիսն իր արդյունքում վերադարձնի այդ ուշացումը: Օգտագործելով ցիկլ և ձեր ֆունկցիան՝ լրացրեք զանգվածը 10 պրոմիսներով:

Задание 2

Օգտագործելով նախորդ առաջադրանքի պրոմիսների զանգվածը՝ արեք այնպես, որ կոնսոլում արտածվի առաջին աշխատած պրոմիսի արդյունքը:

Задание 3

Օգտագործելով նախորդ առաջադրանքի պրոմիսների զանգվածը՝ արեք այնպես, որ կոնսոլում արտածվի բոլոր պրոմիսների արդյունքների գումարը: