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 - биринчи бажарилган промиснинг натижасини чиқаради
});
Aгар массивдаги промисларнинг ҳеч бўлмағанда
биттаси рад этилса, натижа промис darhol
rejected ҳолатига ўтади. Шу сабабдан
юзага келган истиснони сиз ўрганган оддий
усул билан, масалан, catch орқали
тутиб олишингиз мумкин:
Promise.all(promises).then(function(res) {
console.log(res);
}).catch(function(err) {
console.log(err);
});
Ички қисмида 1 дан 10 сониягача
тасодифий кечиктириш белгиланган, промис
қайтарувчи функсия ясаинг. Промис ўз натижаси
сифатида шу кечиктиришни қайтарсин. Цикл
ва сизнинг функсиянг ёрдамида массивни
10 та промис билан тўлдиринг.
Олдинги вазифадан олинган промислар массивидан фойдаланиб, биринчи ишга тушган промиснинг натижаси консольга чиқарилишини таъминланг.
Олдинги вазифадан олинган промислар массивидан фойдаланиб, барча промислар натижаларининг йиғиндиси консольга чиқарилишини таъминланг.