Async/Await: o jeito 'moderno' de escrever código assíncrono
Conheça a sintaxe que torna o código assíncrono mais fácil de ler e escrever, como se fosse síncrono.
Você já viu callbacks e Promises.
Agora chegou a forma mais legível de trabalhar com assincronicidade: async/await.
Pense assim:async/await deixa o código com “cara de síncrono”, mesmo sendo assíncrono por baixo.
Ideia principal
asynctransforma uma função em assíncrona (ela sempre retorna uma Promise).await“espera” a Promise resolver, sem travar a interface do usuário.
Exemplo básico
function esperar2s() {
return new Promise(function (resolve) {
setTimeout(function () {
resolve("Terminou!");
}, 2000);
});
}
async function executar() {
console.log("Início");
const resultado = await esperar2s();
console.log(resultado);
console.log("Fim");
}
executar();
O que acontece?
- A função
executarcomeça. await esperar2s()aguarda o resultado da Promise.- Quando resolve, continua para as próximas linhas.
Regras importantes
1) await só funciona dentro de função async
async function carregar() {
const dados = await Promise.resolve("OK");
console.log(dados);
}
Se tentar usar await fora de função async (em contexto comum), dá erro de sintaxe.
2) async sempre retorna Promise
async function exemplo() {
return 42;
}
exemplo().then(function (valor) {
console.log(valor); // 42
});
Mesmo retornando número, por trás vem em formato de Promise resolvida.
Tratando erros com try...catch
Com async/await, o tratamento de erro fica bem natural:
function buscarUsuario() {
return Promise.reject("Falha ao buscar usuário");
}
async function carregarUsuario() {
try {
const usuario = await buscarUsuario();
console.log(usuario);
} catch (erro) {
console.log("Erro:", erro);
} finally {
console.log("Finalizou o processo");
}
}
carregarUsuario();
try: trecho principalcatch: errofinally: sempre executa no final
Comparando Promise vs Async/Await
Com .then() e .catch()
buscarDados()
.then(function (dados) {
console.log(dados);
})
.catch(function (erro) {
console.log(erro);
});
Com async/await
async function executar() {
try {
const dados = await buscarDados();
console.log(dados);
} catch (erro) {
console.log(erro);
}
}
A segunda versão costuma ficar mais fácil de ler em fluxos maiores.
Quando usar?
Use async/await quando quiser:
- código mais limpo
- menos encadeamento de
.then() - tratamento de erro organizado com
try...catch
Resumo da lição
async/awaité uma forma moderna de consumir Promises.awaitpausa a função assíncrona até a Promise resolver.awaitsó pode ser usado dentro de funçãoasync.try...catché o padrão para tratar erros com clareza.