DEV Community

Cover image for ¿Qué es Promise.allSettled y como usarlo?
Matías Hernández Arellano
Matías Hernández Arellano

Posted on • Originally published at matiashernandez.dev

4

¿Qué es Promise.allSettled y como usarlo?

Este artículo fue originalmente escrito en https://matiashernandez.dev

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.

En el articulo anterior revisamos como ejeuctar Promesas de forma concurrente utilizando Promise.all, [Revisalo aqui][https://matiashernandez.dev/blog/post/ejecuta-codigo-asincrono-de-forma-concurrente-en-javascript]

Y si quieres saber mas sobre Promesas, puedes revisar este articulo introductorio: ¿WTF es una promesa en JS?

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.

const promise1 = getData("userId")

const promise2 = getData("anotherUser")

const result = await Promise.allSettled([ promise1, promise2])
Enter fullscreen mode Exit fullscreen mode


Cabe destacar que el orden del arreglo retornado corresponde con el orden de las promesas utilizadas como argumento

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.

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'
)

Enter fullscreen mode Exit fullscreen mode

Si estás usando Typescript entonces tendrás que aplicar una función de predicado para que el filtro define el tipo correcto
(p): p is Extract<typeof 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.

Footer Social Card.jpg
✉️ Únete a Micro-bytes 🐦 Sígueme en Twitter ❤️ Apoya mi trabajo

Heroku

Simplify your DevOps and maximize your time.

Since 2007, Heroku has been the go-to platform for developers as it monitors uptime, performance, and infrastructure concerns, allowing you to focus on writing code.

Learn More

Top comments (0)

Billboard image

The Next Generation Developer Platform

Coherence is the first Platform-as-a-Service you can control. Unlike "black-box" platforms that are opinionated about the infra you can deploy, Coherence is powered by CNC, the open-source IaC framework, which offers limitless customization.

Learn more

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay