Código asíncrono con callbacks en JavaScript

Supongamos que tenemos una función asíncrona:

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

Supongamos que usamos esta función de la siguiente manera:

javascriptmake();
console.log('2'); // se ejecutará primero

Supongamos que queremos hacer que la segunda impresión en la consola se ejecute después de que se complete la operación asíncrona dentro de la función. Uno de los enfoques utilizados para esto es el uso de callbacks: envolvamos el código pendiente en una función anónima y la pasamos como parámetro a la función make:

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

Por supuesto, esto por sí solo no resolverá nuestra tarea. Por ahora solo hemos establecido el siguiente acuerdo: si desea ejecutar código después de que se active make, pase este código como callback en la llamada a make.

Corrijamos el código de la función make para que comience a funcionar de acuerdo con nuestro acuerdo:

javascriptfunction make(callback) {
  setTimeout(function() {
    console.log('1'); // alguna operación asíncrona, puede ser más de una
    callback();       // luego nuestro callback
  }, 3000);
}
Задание 1

Explique en qué orden se mostrarán los números en la consola:

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

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