Código assíncrono com callbacks em JavaScript
Suponha que temos uma determinada função assíncrona:
function make() {
setTimeout(function() {
console.log('1');
}, 3000);
}
Suponha que usamos esta função da seguinte forma:
make();
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:
make(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:
function make(callback) {
setTimeout(function() {
console.log('1'); // alguma operação assíncrona, pode não ser única
callback(); // então nosso callback
}, 3000);
}
Explique em que ordem os números serão impressos no console:
function make(callback) {
setTimeout(function() {
console.log('1');
callback();
}, 3000);
}
make(function() {
console.log('2');
console.log('3');
});