El conocimiento es el nuevo dinero.
Aprender es la nueva manera en la que inviertes
Acceso Cursos

Dejar de usar Promise.all() en JavaScript

¿Qué son las promesas en JavaScript? Si te has topado con este artículo, probablemente ya estés familiarizado con las promesas. Pero para los nuevos en JavaScript, vamos a explicarlo en detalle.

· 4 min de lectura
Dejar de usar Promise.all() en JavaScript

Esencialmente, un objeto Promise representa la finalización o el fallo de una operación asíncrona. Curiosamente, cuando se crea una promesa a, su valor puede no estar disponible inmediatamente.

const promise = new Promise((resolve, reject) => {
   // Some asynchronous operations
   if (/* operation successful */) {
     resolve(result);
   } else {
     reject(error);
   }
});

Tienen 3 estados:

  • Pendiente: Es el estado inicial y no se ejecuta ni se rechaza.
  • Fulfilled: El estado cuando una promesa se completa con éxito y produce un valor.
  • Rechazada: El estado cuando se produce un error y la operación en la promesa no tuvo éxito.
CPU
1 vCPU
MEMORIA
1 GB
ALMACENAMIENTO
10 GB
TRANSFERENCIA
1 TB
PRECIO
$ 4 mes
Para obtener el servidor GRATIS debes de escribir el cupon "LEIFER"

Una vez resuelta la promesa, puedes utilizar .then() para gestionar el resultado y .catch() para gestionar cualquier error que se haya producido durante su ejecución.

promise
   .then(result => {
     console.log('Success:', result);
   })
   .catch(error => {
     console.error('Error:', error);
   });

Entender Promise.all()

Cuando se trabaja con múltiples promesas al mismo tiempo, puedes aprovechar los métodos incorporados Promise.all([]). Este método acepta un array de promesas y devuelve una promesa unificada. La clave es que esta promesa combinada sólo se resolverá si todas las entradas se han resuelto con éxito. Si una de ellas falla, se rechaza toda la promesa. He aquí un ejemplo:

const promise1 = fetch('https://api.example.com/data1');
const promise2 = fetch('https://api.example.com/data2');
const promise3 = fetch('https://api.example.com/data3');

Promise.all([promise1, promise2, promise3])
   .then(values => {
     console.log('All data obtained:', values);
   })
   .catch(error => {
     console.error('An error occurred:', error);
   });

Este enfoque se utiliza normalmente cuando hay varias tareas asíncronas relacionadas y su trabajo depende unas de otras, por lo que queremos que todas las tareas asíncronas tengan éxito antes de continuar con la ejecución del código.

Revelar Promise.allSettled()

Usar Promise.allSettled([])es Promise.all([])similar a , pero difiere en que espera a que todas las promesasde entrada se completen o sean rechazadas, y devuelve promiseun array de objetos describiendo cada resultado.

const promise1 = Promise.resolve('Success 1');
const promise2 = Promise.reject('Error 2');
const promise3 = Promise.resolve('Success 3');

Promise.allSettled([promise1, promise2, promise3])
   .then(results => {
     results.forEach(result => {
       if(result.status === 'fulfilled') {
         console.log('Successfully obtained value:', result.value);
       } else {
         console.error('Rejected for reason:', result.reason);
       }
     });
  });
//output
// Successfully obtained value: success 1
// Rejected for reason: Error 2
// Successfully obtained value: success 3

Suele utilizarse para manejar operaciones asíncronas que no dependen unas de otras y se desea conocer el resultado de cada una.

Por qué Promise.allSettled() es mejor

En general, usar Promise .allSettled() en lugar de Promise.all() tiene sus ventajas en la mayoría de las situaciones comunes:

Información exhaustiva de los resultados

Si alguna de las promesas es rechazada, Promise.all( ) el rechazo inmediato puede dificultar la determinación del estado de las otras promesas, especialmente si las otras promesas se resuelven con éxito. Utilizando Promise.allSettled([])se obtiene una visión completa de los resultados.

Elegante gestión de errores

Promise.all() el enfoque «fail fast» puede ser limitado si quieres continuar mientras una de ellas falla, mientras que Promise.allSettled() te permite manejar la promesa los resultados de cada una individualmente.

Operaciones por lotes

Cuando se trata de operaciones por lotes, donde las operaciones individuales son independientes, puede que no quieras que todo el lote falle debido a una operación fallida.

Toma de decisiones inteligente

Usando Promise.allSettled(), puedes tomar decisiones más informadas después de obtener los resultados de todas las promesas. Por ejemplo, cuando se obtienen datos de distintas API y una de ellas falla, se puede decidir si continuar procesando los datos o proporcionar una notificación con un mensaje de error.

Experiencia de usuario mejorada

A menudo es mejor proporcionar al usuario los resultados parciales necesarios y notificaciones de error que fallar toda la operación con algún mensaje genérico. Promise.allSettled() hace que este enfoque sea fácil de implementar.

En resumen, Promise.all() puede ser valiosa en algunas situaciones, pero Promise.allSettled() proporciona un enfoque más flexible y resistente para la mayoría de los escenarios.

Fuente