JavaScript-də kallbeklərlə asinxron kod
Tutaq ki, bizim müəyyən asinxron funksiyamız var:
function make() {
setTimeout(function() {
console.log('1');
}, 3000);
}
Tutaq ki, biz bu funksiyadan aşağıdakı kimi istifadə edirik:
make();
console.log('2'); // birinci icra olunacaq
Tutaq ki, biz elə etmək istəyirik ki,
ikinci konsol çıxarışı, funksiyanın
daxilindəki asinxron əməliyyat yerinə
yetirildikdən sonra icra olunsun.
Bunun üçün istifadə olunan yanaşmalardan
biri kallbek istifadəsidir:
gözlənilən kodu anonim funksiyaya
çevirək və parametr kimi make funksiyasına ötürək:
make(function() {
console.log('2');
});
Əlbəttə ki, bu, öz-özünə bizim
məsələmizi həll etməyəcək. Biz sadəcə
aşağıdakı razılaşmanı bağladıq: make
işə düşdükdən sonra kodu icra etmək
istəyirsinizsə, bu kodu make çağırışına
kallbek kimi ötürün.
make funksiyasının kodunu, bizim
razılaşmamıza uyğun işləməyə başlaması
üçün düzəldək:
function make(callback) {
setTimeout(function() {
console.log('1'); // müəyyən asinxron əməliyyat, bir neçə ola bilər
callback(); // sonra bizim kallbekimiz
}, 3000);
}
Konsola nömrələrin hansı ardıcıllıqla çıxarılacağını izah edin:
function make(callback) {
setTimeout(function() {
console.log('1');
callback();
}, 3000);
}
make(function() {
console.log('2');
console.log('3');
});