Msimbo wa Asynchroni na Vitendo vya Kurudia (Callbacks) katika JavaScript
Tuchukulie tuna baadhi ya kaziya asynchroni:
function make() {
setTimeout(function() {
console.log('1');
}, 3000);
}
Tuchukulie tunatumia kaziya hii kama ifuatavyo:
make();
console.log('2'); // itatekelezwa kwanza
Tuchukulie tunataka kufanya hivi, ili matokeo ya pili
katika koni yatekelezwe baada ya
operesheni ya asynchroni
ndani ya kaziya kutekelezwa.
Mojawapo ya mbinu zinazotumika kwa hili,
ni matumizi ya kitendo cha kurudia (callback):
tutafunge msimbo unaosubiri kwa kaziya isiyo na jina
na kuupitisha kama kigezo kwenye kaziya make:
make(function() {
console.log('2');
});
Bila shaka, hii yenyewe haitatatua
shida yetu. Kwa sasa tumekubaliana tu:
ukitaka kutekeleza msimbo baada
ya make kukamilika pitisha huo msimbo
kama kitendo cha kurudia (callback) kwenye wito wa make.
Turekebishe msimbo wa kaziya make ili
ianze kufanya kazi kulingana na makubaliano yetu:
function make(callback) {
setTimeout(function() {
console.log('1'); // operesheni fulani ya asynchroni, labda si moja tu
callback(); // kisha kitendo chetu cha kurudia
}, 3000);
}
Eleza, kwa utaratibu gani nambari zitaonyeshwa kwenye koni:
function make(callback) {
setTimeout(function() {
console.log('1');
callback();
}, 3000);
}
make(function() {
console.log('2');
console.log('3');
});