Até aqui, você já conhece Promise.all e Promise.race.

Agora vamos aprender duas variações modernas que resolvem problemas muito comuns no mundo real:

  • Promise.any
  • Promise.allSettled

Esses métodos não substituem os antigos — eles complementam.

🎯 Objetivo da aula

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

  • Entender a diferença entre all, any e allSettled
  • Escolher o método correto para cada cenário
  • Lidar melhor com falhas parciais
  • Escrever código assíncrono mais robusto

Relembrando rapidamente

Vamos alinhar o comportamento dos métodos mais conhecidos:

  • Promise.all → falha se uma falhar
  • Promise.race → vale a primeira que resolver (ou rejeitar)

Agora veremos alternativas mais flexíveis.

Promise.any — “me dê a primeira que DER CERTO”

Promise.any resolve quando:

  • a primeira Promise for resolvida com sucesso

Ela ignora as rejeições iniciais.

Exemplo prático — múltiplas fontes

 
  const fonte1 = Promise.reject("Fonte 1 indisponível"); 
  const fonte2 = new Promise(resolve => setTimeout(() => resolve("Dados da fonte 2"), 500) ); 
  const fonte3 = new Promise(resolve => setTimeout(() => resolve("Dados da fonte 3"), 1000) );
  Promise.any([fonte1, fonte2, fonte3])
  .then(resultado => {
    console.log(resultado);
  });
 // Saída será: // Dados da fonte 2 

Aqui:

  • a fonte 1 falhou → ignorada
  • a fonte 2 funcionou → resultado final

E se TODAS falharem?

Nesse caso, Promise.any rejeita com um AggregateError.

 Promise.any([ Promise.reject("Erro 1"), Promise.reject("Erro 2") ]) .catch(erro => { console.log(erro.errors); }); 
 // Saída será: // ["Erro 1", "Erro 2"] 
Promise.any só falha se TODAS falharem.

Quando usar Promise.any?

  • múltiplos servidores
  • fallbacks
  • CDNs alternativas
  • qualquer cenário “me dê um que funcione”

Promise.allSettled — “quero saber o resultado de TODAS”

Promise.allSettled:

  • espera todas as Promises finalizarem
  • não falha se alguma rejeitar
  • retorna o status de cada uma

Exemplo prático — relatório completo

 
  const tarefa1 = Promise.resolve("Tarefa 1 OK"); 
  const tarefa2 = Promise.reject("Tarefa 2 falhou"); 
  const tarefa3 = Promise.resolve("Tarefa 3 OK");
  Promise.allSettled([tarefa1, tarefa2, tarefa3])
  .then(resultados => {
    console.log(resultados);
  });
 // Saída será: [ { status: "fulfilled", value: "Tarefa 1 OK" }, { status: "rejected", reason: "Tarefa 2 falhou" }, { status: "fulfilled", value: "Tarefa 3 OK" } ] 

Formato do retorno

Cada resultado tem:

  • status: "fulfilled" ou "rejected"
  • value: se deu certo
  • reason: se falhou

Isso permite tratamento individual.

Exemplo — processando os resultados

 Promise.allSettled([tarefa1, tarefa2, tarefa3]) .then(resultados => { resultados.forEach(resultado => { if (resultado.status === "fulfilled") { console.log("Sucesso:", resultado.value); } else { console.log("Erro:", resultado.reason); } }); }); 
 // Saída será: // Sucesso: Tarefa 1 OK // Erro: Tarefa 2 falhou // Sucesso: Tarefa 3 OK 

Quando usar Promise.allSettled?

  • dashboards
  • relatórios
  • processos em lote
  • quando falhas parciais são aceitáveis

Resumo comparativo

  • Promise.all → tudo ou nada
  • Promise.any → primeira que der certo
  • Promise.allSettled → status de todas
Escolher o método certo evita muitos try/catch desnecessários.

Resumo da aula para nunca mais esquecer

  • Promise.any resolve na primeira Promise bem-sucedida
  • Falhas são ignoradas até todas falharem
  • Promise.allSettled nunca falha
  • Ele retorna o status de cada Promise
  • Esses métodos tornam o código mais robusto

Na próxima aula, vamos conhecer o Top-level await — e entender como usar await fora de funções.


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?

Digitar senhas em computadores de uso coletivo é extremamente perigoso, pois além de softwares de monitoramento, existem dispositivos de hardware que podem capturar suas senhas. Evite ao máximo acessar sites de bancos a partir destes computadores. Veja mais aqui.


Em 1949 a revista Popular Mechanics fez uma previsão para o futuro, dizendo: "Um dia os computadores pesarão menos do que 1,5 tonelada". E pensar que temos smartphones capazes de realizar milhões de vezes mais operações do que os computadores daquela época.


As primeiras máquinas de fliperama do mundo a utilizarem moedas, chamadas de Galaxy Game, custavam mais de 20 mil dólares para serem produzidas. Saiba mais sobre elas aqui.


O Playstation só nasceu porque uma parceria entre Sony e Nintendo, para desenvolver uma unidade de CD para o Super Nintendo, fracassou. Clique aqui e saiba mais.


O famoso título Final Fantasy, da Square Enix, tem este nome exatamente porque se tratava da última esperança da empresa, que estava à beira da falência quando o lançou. Clique aqui e conheça detalhes dessa história.