Callbacks
Definição
Callback é uma função passada como argumento para outra função, que será executada posteriormente — geralmente após a conclusão de uma tarefa assíncrona.
Em programação assíncrona, callbacks são usados para "avisar" que uma tarefa terminou, permitindo que o código continue o fluxo depois do resultado estar pronto.
É uma das formas mais antigas e fundamentais de controlar o fluxo assíncrono, especialmente em JavaScript.
Objetivos do uso de Callbacks
- Executar lógica dependente de uma tarefa assíncrona, após sua conclusão.
- Evitar bloqueio do fluxo principal, mantendo a aplicação responsiva.
- Encadear tarefas em etapas distintas, mantendo controle de tempo e ordem.
- Controlar operações baseadas em eventos (como cliques, timers, carregamento de dados, etc.).
Exemplo prático
Vamos simular uma leitura de arquivo com atraso, usando setTimeout
e um callback:
function lerArquivo(callback) {
setTimeout(() => {
const conteudo = "Dados do arquivo";
callback(conteudo);
}, 1000);
}
console.log("Início da leitura");
lerArquivo((dados) => {
console.log("Arquivo lido:", dados);
});
console.log("Fim da função principal");
Saída esperada
Início da leitura
Fim da função principal
Arquivo lido: Dados do arquivo
A função
lerArquivo
não retorna o valor diretamente.Ela recebe um callback que será chamado quando a tarefa for concluída.
O código continua executando normalmente enquanto a "leitura" ocorre.
O ciclo de um callback assíncrono
[Função inicia tarefa]
↓
[Agenda operação assíncrona]
↓
[Executa callback quando termina]
ℹ️ O callback serve como "notificador": ele espera, mas não bloqueia. Quando a operação assíncrona termina, ele é chamado com o resultado.
Problema frequente: Callback Hell
Encadeamento de múltiplos callbacks pode levar a um código difícil de ler e manter:
funcA((resA) => {
funcB(resA, (resB) => {
funcC(resB, (resC) => {
console.log("Resultado final:", resC);
});
});
});
Isso é conhecido como callback hell — e foi uma das razões pelas quais surgiram Promises e async/await
.
Alternativas modernas
Hoje, callbacks ainda são usados, mas geralmente são substituídos por:
Promises (encadeáveis e mais legíveis)
async/await
(sintaxe imperativa com fluxo mais natural)