Callbacks: o jeito 'antigo' de lidar com assincronicidade
Relembre os callbacks e como eles foram usados para gerenciar tarefas assíncronas.
Antes de Promise e async/await, a forma mais comum de lidar com tarefas assíncronas no JavaScript era usar callbacks.
O que é callback?
Callback é, basicamente, uma função passada como argumento para outra função, para ser executada depois.
Analogia simples:
é como deixar seu número na fila da padaria e dizer:
"quando meu pedido ficar pronto, me chama".
Exemplo simples (síncrono)
function saudacao(nome, callback) {
console.log("Olá, " + nome);
callback();
}
function despedida() {
console.log("Até mais!");
}
saudacao("Ana", despedida);
Aqui, despedida é um callback.
Exemplo assíncrono com setTimeout
console.log("início");
setTimeout(function () {
console.log("tarefa concluída depois de 2 segundos");
}, 2000);
console.log("fim");
A função dentro de setTimeout é um callback que roda depois do tempo definido.
Callback em eventos (muito comum)
const botao = document.getElementById("btn");
botao.addEventListener("click", function () {
console.log("você clicou");
});
A função passada para addEventListener também é callback.
Problema clássico: callback hell
Quando você precisa encadear várias operações assíncronas com callbacks, o código pode ficar muito "aninhado" (um dentro do outro).
tarefa1(function () {
tarefa2(function () {
tarefa3(function () {
console.log("tudo pronto");
});
});
});
Esse formato pode dificultar leitura, manutenção e tratamento de erros.
Tratando erro com callback (padrão comum)
Em Node.js, ficou famoso o padrão error-first callback:
function buscarDados(callback) {
const deuErro = false;
if (deuErro) {
callback("erro ao buscar dados", null);
} else {
callback(null, { nome: "maria" });
}
}
buscarDados(function (erro, dados) {
if (erro) {
console.log("falha:", erro);
return;
}
console.log("sucesso:", dados);
});
- primeiro parâmetro: erro
- segundo parâmetro: resultado
Quando callbacks ainda são úteis?
Mesmo com Promise e async/await, callbacks ainda aparecem em:
- eventos (
addEventListener) - temporizadores (
setTimeout,setInterval) - algumas bibliotecas antigas
Resumo da lição
- callback é uma função passada para ser executada depois.
- foi a forma principal de lidar com assincronicidade por muito tempo.
- funciona, mas pode ficar confuso em fluxos grandes (callback hell).
- entender callbacks é essencial para compreender a evolução para
Promiseseasync/await.