DevPath · Aprenda a programar ESPTEN

Assincronia: promessas e async/await

async / await e Promise.all

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;
}

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á"
Coloque isto em prática

O DevPath é um curso prático: aqui você lê a teoria; no app você a coloca em prática com exercícios que rodam de verdade, offline.

Comece grátis no app →
← PromessasMicrotarefas vs macrotarefas →