Sobes.tech
Junior

O que é Promise.race?

sobes.tech IA

Resposta da IA

Promise.race — é um método que retorna uma nova promessa. Esta nova promessa é resolvida ou rejeitada com o mesmo valor (ou motivo) que a primeira promessa do objeto iterável passado (geralmente um array) que foi concluída.

Princípios de funcionamento:

  1. Entrada: Aceita um objeto iterável (por exemplo, um array) de promessas.
  2. Esperar: Começa uma "competição" entre todas as promessas.
  3. Resultado: Assim que qualquer das promessas no objeto iterável for concluída (seja resolvida ou rejeitada), Promise.race termina instantaneamente com o mesmo resultado.
  4. Ignorar: Os resultados de todas as outras promessas que forem concluídas posteriormente são completamente ignorados.

Exemplo de uso:

// Exemplo de uma promessa que se resolve após 1 segundo
const promise1 = new Promise((resolve) => setTimeout(() => resolve('Primeiro'), 1000));

// Exemplo de uma promessa que se resolve após 500 milissegundos
const promise2 = new Promise((resolve) => setTimeout(() => resolve('Segundo'), 500));

// Exemplo de uma promessa que é rejeitada após 300 milissegundos
const promise3 = new Promise((_, reject) => setTimeout(() => reject(new Error('Erro')), 300));

Promise.race([promise1, promise2, promise3])
  .then((value) => {
    console.log(value); // Mostrará 'Erro'
  })
  .catch((error) => {
    console.error(error.message); // Processará o erro 'Erro'
  });

Neste exemplo, promise3 é concluída primeiro (rejeitada), portanto Promise.race será concluída com um erro, e o bloco .catch será executado. Se promise2 tivesse sido concluída primeiro (por exemplo, em 10 ms), então Promise.race seria resolvida com o valor 'Segundo', e o bloco .then seria executado.

Cenários típicos de uso:

  • Implementação de um timeout para uma operação assíncrona.
  • Obter o resultado da fonte de dados mais rápida entre várias possíveis.
  • Cancelar operações assíncronas concorrentes.