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');
});