Promise.any

El método Promise.any recibe un array de promesas y se resuelve tan pronto como una de ellas haya sido resuelta. El valor del resultado va a ser esa primera promesa resuelta.

const p1 = new Promise(resolve => setTimeout(resolve, 3000, "Resuelta en 3s"));
const p2 = new Promise(resolve => setTimeout(resolve, 5000, "Resuelta en 5s"));
const p3 = new Promise(resolve => setTimeout(resolve, 1000, "Resuelta en 1s"));

Promise.any([p1, p2, p3])
	.then(response => console.log(response))
	.catch(error => console.log(error));

// Resuelta en 1s

Si todas las promesas no se llegaran a cumplir, esta se rechazaría con una nueva subclase Error, llamada AggregateErrror, esto para agruparlos de forma individual.

const p1 = new Promise((resolve, reject) => reject("¡Rechazada!"));
const p2 = new Promise((resolve, reject) => reject("¡Rechazada!"));
const p3 = new Promise((resolve, reject) => reject("¡Rechazada!"));

Promise.any([p1, p2, p3])
	.then(response => console.log(response))
	.catch(error => console.log(error));

// AggregateError: All promises were rejected

Sintaxis

Promise.any(iterable);

Cuando Promise.any se cumple, no espera a que las otras promesas hagan lo mismo. Termina y continua con el proceso que debe de seguir.

También hay que tomar en cuenta que Promise.any va a ignorar todas las promesas rechazadas, hasta que la primera se cumpla.

const p1 = new Promise((resolve, reject) => reject("¡Rechazada!"));
const p2 = new Promise(resolve => setTimeout(resolve, 5000, "Resuleta en 5s"));
const p3 = new Promise(resolve => setTimeout(resolve, 3000, "Resuelta en 3s"));

Promise.any([p1, p2, p3])
	.then(response => console.log(response))
	.catch(error => console.log(error));

// Resuelta en 3s

Async / await

Como en cualquier promesa, también se puede hacer uso de async/await para lo mismo, pero con una sintaxis en mi opinión, más legible.

const p1 = new Promise(resolve => setTimeout(resolve, 3000, "Resuelta en 3s"));
const p2 = new Promise(resolve => setTimeout(resolve, 5000, "Resuleta en 5s"));
const p3 = new Promise(resolve => setTimeout(resolve, 1000, "Resuelta en 1s"));

async function getData(array) {
	try {
		const result = await Promise.any(array);
	  console.log(result);
  } catch(error) {
    console.log(error);
  }
}

getData([p1, p2, p3]);

// Resuelta en 1s

Te puede interesar:

Promise.allSettled
El método promise.allSettled() devuelve una promesa que es resuelta después deque todas las promesas dadas hayan sido concluidas, sin importar si fueronresueltas o rechazadas. El resultado va a ser una serie de objetos describiendoel resultado de cada promesa. const p1 = new Promise((resolve, re…

Recursos:

Comparte tu opinión o duda:
Se parte de mi newsletter

Compartiré contigo las últimas novedades del sitio y otros recursos sobre desarrollo web que no te puedes perder.