Kufanya Kazi na Arrays ya Ahadi (Promises) katika JavaScript
Sasa tutachambua mbinu mbili muhimu,
zinazoruhusu kufanya kazi na arrays za ahadi (promises).
Mbinu Promise.all inaruhusu kutekeleza
mshindi baada ya kukamilika kwa ahadi zote, zilizopitishwa
kwake kwa njia ya array, na mbinu Promise.race
inasubiri kushughulikiwa kwa ahadi ya kwanza kutoka kwenye array,
ikiacha zingine.
Mbinu zote mbili hurejesha ahadi mpya kama matokeo yao.
Kwa mbinu Promise.all matokeo ya
ahadi hii yatakuwa array ya matokeo ya ahadi
zote zilizopitishwa (mpangilio wa matokeo
unafanana na mpangilio wa ahadi kwenye array),
na kwa Promise.race - matokeo ya ahadi
ya kwanza kushughulikiwa.
Wacha tuone kwa vitendo. Hebu tuseme tuna array ya ahadi (promises):
let promises = [
new Promise(resolve => setTimeout(() => resolve(1), 1000)),
new Promise(resolve => setTimeout(() => resolve(2), 2000)),
new Promise(resolve => setTimeout(() => resolve(3), 3000)),
];
Wacha tutumie Promise.all kusubiri
kukamilika kwa upakiaji wa ahadi zote kutoka kwenye
array yetu:
Promise.all(promises).then(function(res) {
console.log(res); // itatoa [1, 2, 3] - matokeo ya ahadi zote
});
Na sasa kwa kutumia Promise.race tusubiri
kukamilika kwa upakiaji wa ahadi ya kwanza:
Promise.race(promises).then(function(res) {
console.log(res); // itatoa 1 - matokeo ya ahadi ya kwanza kushughulikiwa
});
Ikiwa angalau moja ya ahadi kwenye array itakataliwa,
basi ahadi iliyo na matokeo mara moja
itahamia kwenye hali ya rejected. Kwa hivyo
isipokuwa lilotokea linaweza kukamatwa kwa kawaida,
kama tayari umejifunza, kwa mfano, kupitia
catch:
Promise.all(promises).then(function(res) {
console.log(res);
}).catch(function(err) {
console.log(err);
});
Tengeneza kitendakazi, kinachorejesha ahadi (promise), ndani
ambayo imewekwa ucheleweshaji nasibu kutoka
1 hadi 10 sekunde. Acha matokeo yake
ahadi irejeshe ucheleweshaji huu.
Kwa kutumia kitanzi na kitendakazi chako jaza
array na ahadi 10.
Kwa kutumia array ya ahadi kutoka kwenye kazi iliyopita fanya hivi, ili matokeo ya ahadi ya kwanza kushughulikiwa iyatokwe kwenye konsoli.
Kwa kutumia array ya ahadi kutoka kwenye kazi iliyopita fanya hivi, ili jumla ya matokeo ya ahadi zote iyatokwe kwenye konsoli.