Função normal e callback
Uma função normal apenas executa uma tarefa e retorna o resultado. Já uma função de callback é passada como argumento para outra função e é chamada quando a tarefa terminar.
Exemplo 1 (função normal)
function soma(a, b) {
return a + b;
}
console.log(soma(5, 3));
Exemplo 2 (callback simples)
function cumprimentar(nome, callback) {
console.log("Olá, " + nome);
callback();
}
cumprimentar("Maria", () => {
console.log("Callback executado!");
});
Exemplo 3 (simulando servidor com callback)
function buscarDados(callback) {
setTimeout(() => {
callback("📦 Dados carregados!");
}, 2000);
}
buscarDados((resultado) => {
console.log(resultado);
});
Programação síncrona e assíncrona
Na programação síncrona, as instruções são executadas uma após a outra. Se uma linha demora muito (como acessar um servidor), o programa inteiro fica "travado".
Na programação assíncrona, o JavaScript não espera a tarefa lenta terminar. Ele continua executando o resto do código e, quando a tarefa acaba, chama uma função de retorno.
Exemplo 1 (síncrono)
console.log("Início");
for (let i = 0; i < 3; i++) {
console.log("Processando", i);
}
console.log("Fim");
Exemplo 2 (assíncrono com setTimeout)
console.log("Início");
setTimeout(() => {
console.log("Processo demorado terminou!");
}, 2000);
console.log("Fim");
Exemplo 3 (requisição simulada)
console.log("Buscando dados...");
setTimeout(() => {
console.log("✅ Dados recebidos do servidor!");
}, 3000);
console.log("Você pode continuar usando o app...");
Async/Await
async
e await
são formas mais simples de lidar com Promises.
O async transforma a função em assíncrona, retornando uma Promise.
O await faz o código "esperar" pela resposta da Promise.
Exemplo 1 (async cria promise automaticamente)
async function exemplo() {
return "🚀 Retornado dentro de uma async!";
}
exemplo().then(console.log);
Exemplo 2 (usando await)
function esperar(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
async function executar() {
console.log("Início");
await esperar(2000);
console.log("Fim após 2 segundos");
}
executar();
Exemplo 3 (tratamento de erros com try/catch)
async function buscarDados() {
try {
throw new Error("Falha na conexão!");
} catch (erro) {
console.log("⚠️ Erro capturado:", erro.message);
}
}
buscarDados();