JavaScript-da Kallbéklar bilan Asinxron Kod
Faraz qilaylik, bizda quyidagi asinxron funksiya mavjud:
function make() {
setTimeout(function() {
console.log('1');
}, 3000);
}
Faraz qilaylik, biz bu funksiyani quyidagicha ishlatmoqchimiz:
make();
console.log('2'); // birinchi bo'lib bajariladi
Faraz qilaylik, biz shuni istaymizki, ikkinchi
consolga chiqarish, funksiya ichidagi asinxron operatsiya
bajarilgandan keyin bajarilsin.
Buning uchun qo'llaniladigan yondashuvlardan biri
kallbék dan foydalanishdir:
kutayotgan kodni anonim funksiyaga o'rab,
make funksiyasiga parametr sifatida o'tkazamiz:
make(function() {
console.log('2');
});
Albatta, bu o'zi bizning muammomizni
hal qilmaydi. Hozircha biz shartnoma tuzdik: make
ishtirokidan keyin kodni bajarishni istasangiz,
ushbu kodni make chaqiruviga kallbék sifatida o'tkazing.
Endi make funksiyasining kodini shunday tuzamizki,
u bizning shartnomamizga muvofiq ishlay boshlasin:
function make(callback) {
setTimeout(function() {
console.log('1'); // qandaydir asinxron operatsiya, bitta bo'lishi shart emas
callback(); // keyin bizning kallbékimiz
}, 3000);
}
Consolda raqamlar qanday tartibda chiqarilishini aytib bering:
function make(callback) {
setTimeout(function() {
console.log('1');
callback();
}, 3000);
}
make(function() {
console.log('2');
console.log('3');
});