Асинхронӣ коди JavaScript бо истифодаи callback
Бигзор мо як функсияи асинхрониро дошта бошем:
function make() {
setTimeout(function() {
console.log('1');
}, 3000);
}
Бигзор мо ин функсияро ба ин тавр истифода барем:
make();
console.log('2'); // аввал иҷро мешавад
Бигзор мо мехоҳем ҳамин тавр кунем, ки натиҷаи дуюм
дар консол пас аз он ки амалиёти асинхронӣ
дар дохили функсия иҷро шавад, ба намоиш гузошта шавад.
Яке аз равишҳои истифодашаванда барои ин,
истифодаи callback мебошад:
коди интизорро дар як функсияи бе ном мепечонем
ва онро ба унвони параметр ба функсияи make мегузаронем:
make(function() {
console.log('2');
});
Албатта, худи ин масъалаи моро ҳал намекунад.
Ҳоло мо танҳо ин созишро бастаем: агар мехоҳед коди пас аз
фаъол шудани make иҷро шавад, он кодро
ба унвони callback дар даъвати make гузаронед.
Коди функсияи make-ро тавре ислоҳ кунем, ки
он боқияд бо созиши мо кор кунад:
function make(callback) {
setTimeout(function() {
console.log('1'); // ягон амалиёти асинхронӣ, шояд як нафар набошад
callback(); // сипас callback-и мо
}, 3000);
}
Ба гуфтанд, ба кадом тартиб рақамҳо дар консол чоп карда мешаванд:
function make(callback) {
setTimeout(function() {
console.log('1');
callback();
}, 3000);
}
make(function() {
console.log('2');
console.log('3');
});