Agora que você já entende Promises e async/await, vamos aprender a trabalhar com múltiplas Promises ao mesmo tempo.

Para isso, o JavaScript oferece dois métodos fundamentais:

  • Promise.all
  • Promise.race

Eles resolvem problemas diferentes — e entender essa diferença é essencial.

🎯 Objetivo da aula

Ao final desta aula, você será capaz de:

  • Executar Promises em paralelo
  • Entender o comportamento de Promise.all
  • Entender o comportamento de Promise.race
  • Escolher o método correto para cada cenário

Executando Promises em paralelo

Quando criamos várias Promises, elas podem executar ao mesmo tempo:

 
  const tarefa1 = new Promise(resolve => setTimeout(() => resolve("Tarefa 1 concluída"), 1000) );
  const tarefa2 = new Promise(resolve =>
  setTimeout(() => resolve("Tarefa 2 concluída"), 500)
);

Agora vamos coordenar essas Promises.

Promise.all — “tudo ou nada”

Promise.all:

  • espera todas as Promises resolverem
  • retorna um array com os resultados
  • falha se uma Promise falhar

Exemplo com Promise.all

 Promise.all([tarefa1, tarefa2]) .then(resultados => { console.log(resultados); }); 
 // Saída será: // ["Tarefa 1 concluída", "Tarefa 2 concluída"] 

Observe:

  • a ordem do array segue a ordem das Promises
  • não a ordem de finalização

E se uma Promise falhar?

 
  const tarefa3 = Promise.reject("Erro na tarefa 3");
  Promise.all([tarefa1, tarefa3, tarefa2])
  .then(resultados => {
    console.log(resultados);
  })
  .catch(erro => {
    console.log(erro);
  });
 // Saída será: // Erro na tarefa 3 
Se uma Promise falhar, Promise.all falha imediatamente.

Quando usar Promise.all?

  • todas as tarefas são obrigatórias
  • dependências críticas
  • carregamento inicial de dados

Promise.race — “vale a primeira”

Promise.race:

  • resolve ou rejeita com a primeira Promise finalizada
  • não espera as outras

Exemplo com Promise.race

 Promise.race([tarefa1, tarefa2]) .then(resultado => { console.log(resultado); }); 
 // Saída será: // Tarefa 2 concluída 

A tarefa mais rápida vence.

E se a primeira falhar?

 
  const tarefaFalhaRapida = new Promise((_, reject) => setTimeout(() => reject("Falha rápida"), 300) );
  Promise.race([tarefaFalhaRapida, tarefa1])
  .catch(erro => {
    console.log(erro);
  });
 // Saída será: // Falha rápida 
Promise.race não distingue sucesso de erro.

Quando usar Promise.race?

  • timeouts
  • requisições concorrentes
  • limite de espera

Comparação direta

  • Promise.all → tudo precisa dar certo
  • Promise.race → vale a primeira a terminar
Esses métodos são a base para entender Promises modernas.

Resumo da aula para nunca mais esquecer

  • Promise.all executa tudo em paralelo
  • Falha se qualquer Promise falhar
  • Promise.race resolve com a primeira
  • Pode resolver ou rejeitar
  • São métodos fundamentais das Promises

Na próxima aula, vamos conhecer as Promises modernas: Promise.any e Promise.allSettled.


HARDWARE

Entendendo o seu computador

O que há dentro do meu computador?

Existem alguns componentes fundamentais presentes dentro do seu computador e é muito importante que você conheça um pouco sobre eles, seja para argumentar com algum vendedor durante a compra de um novo PC ou para identificar alguma atitude desleal de algum técnico que esteja te passando um orçamento para reparo. Na seção Raio-X aqui do Contém Bits você pode conhecer e entender mais detalhadamente sobre cada componente, ou também pode clicar abaixo no componente que deseja, para conhecê-lo melhor.

  • Gabinetes

  • Placas-Mãe

  • Processadores

  • Memória

  • Fontes

  • Drives Ópticos

  • Discos Rígidos

  • SSD

  • Placas de Som

  • Placas de Vídeo

Você Sabia?

O primeiro computador a conseguir rodar o jogo Spacewar era o PDP-1, que custava 120 mil dólares e pertencia ao Massachusetts Institute of Technology. O jogo demorou 200 horas para ser desenvolvido, em 1962, e seu criador foi um cientista da computação chamado Steve Russel.


Desde o seu lançamento, em 1985, o fantástico jogo Tetris vende pelo menos 70 milhões de unidades por ano em todo o mundo! Os dados são oficiais e fornecidos pela THQ, uma das distribuidoras do título.


Utilizar seu notebook em camas, sofás ou qualquer superfície macia pode obstruir as entradas e saídas de ar, elevando a temperatura e provocando danos a diversos componentes. Utilize-o sempre sobre uma superfície rígida. Saiba mais aqui.


O personagem Mario surgiu pela primeira vez no mundo dos games em um jogo chamado Donkey Kong, lançado em 1981. Mario, que naquela época se chamava Jumpman, não era o personagem principal do jogo, mas ele se tornaria um dos mais famosos personagens do mundo dos games. Saiba mais.


Ao completar o nível 99 do jogo Duck Hunt, para Nintendo, o jogo retorna ao primeiro nível, mas um bug impede que se acerte os patos neste recomeço. Este é um exemplo do que é chamado no mundo dos games de "Kill Screen".