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 պրոմիսներով:
Օգտագործելով նախորդ առաջադրանքի պրոմիսների զանգվածը՝ արեք այնպես, որ կոնսոլում արտածվի առաջին աշխատած պրոմիսի արդյունքը:
Օգտագործելով նախորդ առաջադրանքի պրոմիսների զանգվածը՝ արեք այնպես, որ կոնսոլում արտածվի բոլոր պրոմիսների արդյունքների գումարը: