async / await
async/await é açúcar sintático sobre as promessas que permite escrever
código assíncrono que se lê como se fosse síncrono.
async function carregarUsuario() {
const resposta = await fetch("/usuario"); // espera a promessa
const dados = await resposta.json();
return dados;
}
- A palavra
asyncna frente de uma função faz com que ela sempre devolva uma promessa. - A palavra
awaitpausa a função até que a promessa seja resolvida, e devolve o seu valor. Só pode ser usada dentro de funçõesasync.
Para tratar erros com await, usa-se try...catch:
async function carregar() {
try {
const dados = await pedirDados();
return dados;
} catch (erro) {
console.log("Falhou:", erro.message);
}
}
Promise.all: esperar várias de uma vez
Quando você tem várias tarefas independentes, não as espere uma a uma: dispare-as
em paralelo com Promise.all, que se cumpre quando todas terminam.
const [a, b] = await Promise.all([pedirA(), pedirB()]);
Lembre-se de que uma função async é identificada por
fn.constructor.name === "AsyncFunction", e de que chamar qualquer função
async devolve um objeto que é instanceof Promise.
Exemplos
Uma função async sempre devolve uma promessa
async function saudar() {
return "olá";
}
console.log(saudar.constructor.name); // "AsyncFunction"
console.log(saudar() instanceof Promise); // true
saudar().then((v) => console.log(v)); // "olá"