Marcos N
← Voltar ao blog

javascript

async/await vs Promise.all(): quando executar em paralelo?

Aprenda a diferença entre awaits sequenciais e Promise.all, quando executar requisições em paralelo e como melhorar a performance do JavaScript.

Marcos N2 min de leitura
async/await vs Promise.all(): quando executar em paralelo?

async/await vs Promise.all(): quando executar em paralelo?

Considere este código:

const user = await getUser();
const posts = await getPosts();
const notifications = await getNotifications();

Parece correto. E realmente pode estar.

Mas existe um detalhe: cada operação aguarda a anterior terminar.

O problema

Diagrama
100%

Desenhando diagrama…

Mão: arraste para explorar · + / − para zoom · 0 para restaurar

Notas:

Promise.all() não substitui async/await. Ele permite aguardar várias Promises juntas quando elas podem ser executadas simultaneamente.

Tecnologias Utilizadas

  • JavaScript
  • Promises
  • async/await

Como fazer?

Passo a Passo

1

Passo 1: Identifique dependências

Descubra se uma operação precisa do resultado da anterior.
2

Passo 2: Separe tarefas independentes

Requisições independentes podem iniciar juntas.
3

Passo 3: Utilize Promise.all

Aguarde todas as Promises em um único ponto.
4

Passo 4: Trate erros

Entenda que Promise.all rejeita quando uma das Promises rejeita.

🐢 Execução sequencial

index.js
const user = await getUser();
const posts = await getPosts();
const notifications = await getNotifications();

⚡ Execução em paralelo

index.js
const [
  user,
  posts,
  notifications,
] = await Promise.all([
  getUser(),
  getPosts(),
  getNotifications(),
]);

Agora:

getUser ─────────────┐
getPosts ────────────┼── resultado
getNotifications ───┘

Quando NÃO utilizar?

const user = await getUser();
const posts = await getPosts(user.id);

Aqui precisamos primeiro conhecer user.id.

Tratamento de erros

const results = await Promise.allSettled([
  getUser(),
  getPosts(),
  getNotifications(),
]);

Promise.allSettled() é útil quando queremos receber o resultado de todas as operações, inclusive as que falharam.

✅ Resultado Final

Promise.all() pode melhorar bastante o tempo de resposta quando temos operações independentes.

🛠️ Considerações Finais

O objetivo não é transformar todo await em Promise.all().

Primeiro entenda a dependência dos dados. Depois escolha a estratégia.