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.
const promise1 = getData("userId")
const promise2 = getData("anotherUser")
const result = await Promise.allSettled([ promise1, promise2])
sponsor
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.
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.
😃 Gracias por leer!
Te pareció interesante? Encuentra más contenido similar uniendote al Newsletter o siguiendome en Twitter.