Массивҳои ваъдаҳо дар 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-ю ваъдаҳо пур кунед.
Бо истифода аз массиви ваъдаҳо аз вазифаи қаблӣ чунон кунед, ки дар консоль натиҷаи аввалин ваъдае, ки иҷро шудааст, бароварда шавад.
Бо истифода аз массиви ваъдаҳо аз вазифаи қаблӣ чунон кунед, ки дар консоль ҷамъи натиҷаҳои ҳамаи ваъдаҳо бароварда шавад.