Async/Await
Definição
async/await é uma forma moderna de lidar com operações assíncronas, tornando o código mais claro e sequencial.
Ela permite escrever código como se fosse síncrono, mas lidando internamente com Promises.
asyncdefine que uma função retorna uma Promise.awaitpausa a execução da função até que a Promise seja resolvida (ou rejeitada).
Essa abordagem facilita o controle de fluxo, evita o encadeamento excessivo de .then() e permite tratamento de erros com try/catch, como em código síncrono.
Objetivos do uso de async/await
- Tornar o código assíncrono mais legível e sequencial.
- Substituir o encadeamento de
.then()por um estilo mais linear. - Usar
try/catchpara capturar erros, como em código tradicional. - Melhorar a manutenção e depuração do código.
Exemplo prático
Vamos simular uma função que lê um "arquivo" com atraso:
function lerArquivo() {
return new Promise((resolve) => {
setTimeout(() => {
resolve("Conteúdo do arquivo");
}, 1000);
});
}
Código com .then()
lerArquivo().then((conteudo) => {
console.log("Arquivo lido:", conteudo);
});
Código com async/await
async function executar() {
console.log("Lendo...");
const conteudo = await lerArquivo();
console.log("Arquivo lido:", conteudo);
}
executar();
Saída esperada
Lendo...
(espera 1 segundo)
Arquivo lido: Conteúdo do arquivo
Tratamento de erros com try/catch
async function executar() {
try {
const conteudo = await lerArquivo();
console.log("Conteúdo:", conteudo);
} catch (erro) {
console.error("Erro ao ler:", erro);
}
}
awaitsuspende a execução até a Promise ser resolvida.Erros podem ser capturados com
try/catch, como em código síncrono.
O ciclo de async/await
[Função async chamada]
↓
[Executa até encontrar await]
↓
[Aguarda Promise resolver]
↓
[Continua a execução com o resultado]
Vantagens sobre .then()
Código mais limpo e próximo da leitura humana.
Erros capturados de forma centralizada.
Ideal para fluxos assíncronos longos e encadeados.
ℹ️
async/awaitnão substitui Promises — ele usa Promises por baixo dos panos, mas com uma sintaxe mais amigável.