¿Qué es Promise.allSettled y como usarlo?

- 2 min read

En la versión ECMAScript 2021, el estándar agregó un nuevo método estático al objeto Promise. Este método te permite manejar múltiples promesas de forma concurrente, pero a diferencia de Promise.all este método espera a que todas las promesas hayan sido establecidas sin importar si estas fueron resueltas o rechazadas.

Este método es muy similar a Promise.all, en efecto comparten la misma sintaxis y forma de uso, lo que cambia es el resultado que retorna.

js
					
						
const promise1 = getData("userId")

const promise2 = getData("anotherUser")

const result = await Promise.allSettled([ promise1, promise2])
					
				

sponsor

El contenido de este sitio es y será siempre gratuito para todos. Ayudame a mantenerlo así convirtiendote en auspiciador.
Matias Hernández Logo

Tu producto o servicio podría estar aquí

Lo importante de entender es que Promise.allSettled:

  • Esperará por todas las promesas sin importar su resultado
  • El resultado de cada promesa será de la forma {status: "fulfilled", value: <result>} o {status: "rejected", reason: <el error>}

Esto te permite filtrar los resultados basándose en el estado de cada promesa resuelta.

js
					
						
const promise1 = getData("userId")

const promise2 = getData("anotherUser")

const promise3 = performLongOp()

const promise4 = anotherOp()

const result = await Promise.allSettled([ promise1, promise2, promise3, promise4 ])

const fulfilled = results.filter(
  (p) =>p.status === 'fulfilled'
)

					
				

¿Cuál es la diferencia entre Promise.allSettled y Promise.all?

  • Promise.allSettled es tu opción si lo que buscas es ejecutar múltiples operaciones asíncronas de forma concurrente cuando estas no dependen entre sí y tampoco dependen de si una u otra fue exitosa en su operación.
  • También te será útil si lo que buscas es conocer el resultado de cada operación asíncrona.
  • Promise.all es completamente rechazado si una o más promesas utilizadas como argumentos también lo fueron.

😃 Thanks for reading!

Did you like the content? Found more content like this by joining to the Newsletter or following me on Twitter