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

¿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

Top comments (0)