JavaScript да коллбэклар орқали асинхрон код
Фарз қилайлик, бизда бирор асинхрон функция бор:
function make() {
setTimeout(function() {
console.log('1');
}, 3000);
}
Фарз қилайлик, биз бу функцияни қуйидагича ишлатамиз:
make();
console.log('2'); // биринчи бажарилади
Фарз қилайлик, биз истаймизки, иккинчи
консолга чиқиш, функция ичидаги асинхрон
операция бажарилганидан кейин бажарилсин.
Бунинг учун ишлатиладиган ёндашувлардан бири
коллбэклардан фойдаланишдир:
кутиладиган кодни аноним функцияга ўраб,
функция makeга параметр сифатида ўтказамиз:
make(function() {
console.log('2');
});
Албатта, бу ўзимизнинг вазифамизни ечмайди.
Ҳозирча биз фақат қуйидаги келишувга келдик: make сўнгасидан кодни бажаришни истасангиз, у кодни
коллбэк сифатида make чақирувига ўтказанг.
make функциясининг кодини шундай ўзгартирамизки,
у бизнинг келишувимизга мувофиқ ишлаша бошласин:
function make(callback) {
setTimeout(function() {
console.log('1'); // бирор асинхрон операция, бир нечта бўлиши мумкин
callback(); // сўнгра бизнинг коллбэкимиз
}, 3000);
}
Консолда сонлар қандай тартибда чиқарилишини айтинг:
function make(callback) {
setTimeout(function() {
console.log('1');
callback();
}, 3000);
}
make(function() {
console.log('2');
console.log('3');
});