Sobes.tech
Junior

¿Qué es Promise.race?

sobes.tech AI

Respuesta de la IA

Promise.race — es un método que devuelve una nueva promesa. Esta nueva promesa se resuelve o rechaza con el mismo valor (o motivo) que la primera promesa del objeto iterable pasado (generalmente un array) que se haya completado.

Principios de funcionamiento:

  1. Entrada: Acepta un objeto iterable (por ejemplo, un array) de promesas.
  2. Esperar: Comienza una "competencia" entre todas las promesas.
  3. Resultado: Tan pronto como cualquiera de las promesas en el objeto iterable se complete (ya sea que se resuelva o rechace), Promise.race se completa instantáneamente con el mismo resultado.
  4. Ignorar: Los resultados de todas las demás promesas que se completen posteriormente se ignoran completamente.

Ejemplo de uso:

// Ejemplo de una promesa que se resuelve después de 1 segundo
const promise1 = new Promise((resolve) => setTimeout(() => resolve('Primero'), 1000));

// Ejemplo de una promesa que se resuelve después de 500 milisegundos
const promise2 = new Promise((resolve) => setTimeout(() => resolve('Segundo'), 500));

// Ejemplo de una promesa que se rechaza después de 300 milisegundos
const promise3 = new Promise((_, reject) => setTimeout(() => reject(new Error('Error')), 300));

Promise.race([promise1, promise2, promise3])
  .then((value) => {
    console.log(value); // Mostrará 'Error'
  })
  .catch((error) => {
    console.error(error.message); // Procesará el error 'Error'
  });

En este ejemplo, promise3 se completa primero (se rechaza), por lo que Promise.race se completa con un error, y se ejecuta el bloque .catch. Si promise2 se hubiera completado primero (por ejemplo, en 10 ms), entonces Promise.race se resolvería con el valor 'Segundo', y se ejecutaría el bloque .then.

Escenarios típicos de uso:

  • Implementación de un tiempo de espera para una operación asíncrona.
  • Obtener el resultado del fuente de datos más rápido entre varios posibles.
  • Cancelar operaciones asíncronas en competencia.