Kod Asinkron dengan Panggilan Balik dalam JavaScript
Katakan kita mempunyai satu fungsi asinkron:
function make() {
setTimeout(function() {
console.log('1');
}, 3000);
}
Katakan kita menggunakan fungsi ini dengan cara berikut:
make();
console.log('2'); // akan dilaksanakan dahulu
Katakan kita ingin memastikan output kedua
ke konsol dilaksanakan selepas
operasi asinkron di dalam fungsi selesai.
Salah satu pendekatan yang digunakan untuk ini
ialah penggunaan panggilan balik:
bungkus kod yang menunggu dalam fungsi tanpa nama
dan hantarkannya sebagai parameter kepada fungsi make:
make(function() {
console.log('2');
});
Sudah tentu, ini sahaja tidak menyelesaikan
masalah kita. Setakat ini kita hanya membuat
perjanjian berikut: jika ingin melaksanakan kod selepas
make dicetuskan, hantarkan kod tersebut
sebagai panggilan balik dalam panggilan make.
Mari betulkan kod fungsi make supaya
ia mula berfungsi mengikut perjanjian kami:
function make(callback) {
setTimeout(function() {
console.log('1'); // beberapa operasi asinkron, mungkin bukan satu
callback(); // kemudian panggilan balik kami
}, 3000);
}
Terangkan, dalam susunan apakah nombor akan dipaparkan dalam konsol:
function make(callback) {
setTimeout(function() {
console.log('1');
callback();
}, 3000);
}
make(function() {
console.log('2');
console.log('3');
});