Async/Await em JavaScript:
Programação Assíncrona Simplificada
O que é Assincronicidade?
JavaScript é single-threaded, ou seja, executa uma tarefa por vez. Operações
demoradas (como requisições de rede) bloqueiam a execução. A programação
assíncrona permite que essas operações ocorram em segundo plano, sem "congelar" a
aplicação. Tradicionalmente, usava-se callbacks e Promises. async/await é uma
sintaxe moderna (ES2017) que simplifica o código assíncrono, tornando-o mais legível
e parecido com o síncrono.
Promises: A Base
async/await é construído sobre Promises. Uma Promise representa o resultado
eventual de uma operação assíncrona, podendo estar em três estados: Pending
(pendente), Fulfilled (concluída com sucesso) ou Rejected (falhou).
// Exemplo de Promise
function buscarDadosSimulado() {
return new Promise((resolve) => {
setTimeout(() => resolve("Dados carregados!"), 1000);
});
}
buscarDadosSimulado().then(dados => [Link](dados));
Async/Await em Ação
async
A palavra-chave async define uma função assíncrona. Funções async sempre
retornam uma Promise. Se você retornar um valor não-Promise, ele será
automaticamente envolvido em uma Promise resolvida.
async function saudacao() {
return "Olá, Async!";
}
saudacao().then(msg => [Link](msg)); // Olá, Async!
await
A palavra-chave await só pode ser usada dentro de uma função async . Ela "pausa" a
execução da função async até que a Promise que está sendo aguardada seja resolvida
ou rejeitada. O valor resolvido da Promise é então retornado. Se a Promise for
rejeitada, await lançará uma exceção.
async function carregarEExibirDados() {
try {
[Link]("Iniciando...");
const dados = await buscarDadosSimulado(); // Pausa aqui
[Link](dados); // Dados carregados!
[Link]("Finalizado.");
} catch (erro) {
[Link]("Erro:", erro);
}
}
carregarEExibirDados();
Tratamento de Erros
Erros em async/await são tratados com try...catch , similar ao código síncrono. Se
uma Promise aguardada for rejeitada, o erro é capturado pelo bloco catch .
async function operacaoComErro() {
try {
// Suponha que esta Promise rejeite
const resultado = await [Link]("Falha na operação!");
[Link](resultado);
} catch (erro) {
[Link]("Erro capturado:", erro); // Erro capturado: Falha na
operação!
}
}
operacaoComErro();
Conclusão
async/await simplifica drasticamente a escrita de código assíncrono, tornando-o
mais limpo, legível e fácil de depurar. É uma ferramenta essencial para lidar com
operações que levam tempo, como requisições de rede, garantindo que sua aplicação
permaneça responsiva.