Volver a la página principal
viernes 27 septiembre 2024
9

Cómo manejar múltiples promesas con Promise.allSettled en JavaScript

Promise.allSettled es un método en JavaScript que se utiliza para esperar a que todas las promesas en un conjunto hayan finalizado, sin importar si fueron resueltas o rechazadas. A diferencia de Promise.all, no se detiene si alguna de las promesas falla, lo que permite manejar los resultados de cada una de ellas de manera individual.

¿Qué es Promise.allSettled en JavaScript?

Promise.allSettled recibe como argumento un array de promesas y devuelve una nueva promesa que se resuelve cuando todas las promesas en el array han terminado. El resultado de Promise.allSettled es un array de objetos que indican el estado (fulfilled o rejected) y el valor o la razón de cada promesa.

Es especialmente útil cuando se quiere manejar cada resultado de las promesas sin interrumpir el flujo si alguna falla.

Ejemplo básico de Promise.allSettled

const promesa1 = Promise.resolve('Éxito');
const promesa2 = Promise.reject('Error');
const promesa3 = Promise.resolve('Otro éxito');

Promise.allSettled([promesa1, promesa2, promesa3])
  .then(resultados => {
    resultados.forEach((resultado, index) => {
      if (resultado.status === 'fulfilled') {
        console.log(`Promesa ${index + 1} cumplida:`, resultado.value);
      } else {
        console.log(`Promesa ${index + 1} rechazada:`, resultado.reason);
      }
    });
  });

Salida del ejemplo:

Promesa 1 cumplida: Éxito
Promesa 2 rechazada: Error
Promesa 3 cumplida: Otro éxito

Diferencia entre Promise.all y Promise.allSettled

  • Promise.all: Falla inmediatamente si alguna de las promesas es rechazada.
  • Promise.allSettled: Espera a que todas las promesas terminen, independientemente de si fueron cumplidas o rechazadas.

Ejemplo comparativo:

const promesas = [
  Promise.resolve('Primera promesa'),
  Promise.reject('Segunda promesa falló'),
  Promise.resolve('Tercera promesa')
];

// Con Promise.all
Promise.all(promesas)
  .then(result => console.log('Resultado:', result))
  .catch(error => console.log('Error en alguna promesa:', error));

// Con Promise.allSettled
Promise.allSettled(promesas)
  .then(resultados => console.log('Resultados de todas las promesas:', resultados));

Referencia oficial

Puedes consultar más información sobre Promise.allSettled en la documentación oficial de MDN.

Etiquetas:
javascript
Compartir:
Creado por:
Author photo

Jorge García

Fullstack developer