Asinhroni kod sa kolbekima u JavaScript

Pretpostavimo da imamo neku asinhronu funkciju:

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

Pretpostavimo da koristimo ovu funkciju na sledeći način:

javascriptmake();
console.log('2'); // izvršiće se prvo

Pretpostavimo da želimo da postignemo da se drugi ispis u konzolu izvrši nakon što se izvrši asinhrona operacija unutar funkcije. Jedan od pristupa koji se koristi za ovo je korišćenje kolbeka: umotajmo kod koji čeka u anonimnu funkciju i prosledimo je kao parametar funkciji make:

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

Naravno, samo ovo neće rešiti naš problem. Za sada smo samo uspostavili sledeći dogovor: ako želite da izvršite kod nakon okidanja make, prosledite taj kod kao kolbek pri pozivu make.

Ispravimo kod funkcije make tako da počne da radi u skladu sa našim dogovorom:

javascriptfunction make(callback) {
  setTimeout(function() {
    console.log('1'); // neka asinhrona operacija, možda ne samo jedna
    callback();       // zatim naš kolbek
  }, 3000);
}
Задание 1

Objasnite, kojim redosledom će se ispisati brojevi u konzolu:

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

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