Código assíncrono com callbacks em JavaScript

Suponha que temos uma determinada função assíncrona:

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

Suponha que usamos esta função da seguinte forma:

javascriptmake();
console.log('2'); // será executado primeiro

Suponha que queremos fazer com que a segunda impressão no console seja executada após a operação assíncrona dentro da função ser concluída. Uma das abordagens usadas para isso é o uso de um callback: vamos envolver o código que espera em uma função anônima e passá-la como parâmetro para a função make:

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

Claro, isso por si só não resolverá nossa tarefa. Por enquanto, apenas estabelecemos a seguinte convenção: se desejar executar código após a ativação de make, passe esse código como um callback na chamada de make.

Vamos corrigir o código da função make para que ela comece a funcionar de acordo com nossa convenção:

javascriptfunction make(callback) {
  setTimeout(function() {
    console.log('1'); // alguma operação assíncrona, pode não ser única
    callback();       // então nosso callback
  }, 3000);
}
Задание 1

Explique em que ordem os números serão impressos no console:

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

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