JavaScript-ում կոլբեքներով ասինխրոն կոդ

Ենթադրենք ունենք ինչ-որ ասինխրոն ֆունկցիա՝

javascriptfunction make() {
  setTimeout(function() {
    console.log('1');
  }, 3000);
}

Ենթադրենք այս ֆունկցիան օգտագործում ենք հետևյալ կերպ.

javascriptmake();
console.log('2'); // կկատարվի առաջինը

Ենթադրենք ուզում ենք անել այնպես, որ երկրորդ տպումը կոնսոլում կատարվի այն բանից հետո, երբ կատարվում է ֆունկցիայի ներսում գտնվող ասինխրոն գործողությունը։ Դրա համար օգտագործվող մոտեցումներից մեկը կոլբեքների օգտագործումն է՝ սպասվող կոդը փաթաթում ենք անանուն ֆունկցիայի մեջ և փոխանցում որպես պարամետր make ֆունկցիային.

javascriptmake(function() {
  console.log('2');
});

Իհարկե, սա ինքնին չի լուծի մեր խնդիրը։ Այժմ մենք պարզապես կնքեցինք հետևյալ համաձայնությունը. make-ի գործարկումից հետո կոդը կատարելու ցանկության դեպքում փոխանցեք այդ կոդը կոլբեքով make-ի կանչին։

Ուղղենք make ֆունկցիայի կոդն այնպես, որ այն սկսի աշխատել մեր համաձայնությանը համապատասխան.

javascriptfunction make(callback) {
  setTimeout(function() {
    console.log('1'); // ինչ-որ ասինխրոն գործողություն, կարող է մեկից ավելի լինել
    callback();       // ապա մեր կոլբեքը
  }, 3000);
}
Задание 1

Պատմեք, թե ինչ հերթականությամբ կտպվեն թվերը կոնսոլում.

javascriptfunction make(callback) {
  setTimeout(function() {
    console.log('1');
    callback();
  }, 3000);
}

make(function() {
  console.log('2');
  console.log('3');
});