Lingua-e
← Errores
JavaScript

Qué significa Promise.all rechazado y cómo solucionarlo

Referencia del error

Promise.all rechazado

Lenguaje

JavaScript

Severidad

Media

Cuándo ocurre

Promise.all() rechaza inmediatamente cuando cualquiera de sus promesas de entrada es rechazada, descartando los resultados de todas las demás promesas incluso si tienen éxito.

Posibles soluciones

Usa Promise.allSettled() para obtener los resultados de todas las promesas independientemente de los fallos individuales. Filtra los resultados por status === 'fulfilled' para extraer los valores exitosos. Usa Promise.all() solo cuando quieras semántica todo o nada.

Más detalles

Promise.all() rechaza inmediatamente cuando cualquiera de sus promesas de entrada es rechazada, descartando los resultados de todas las demás promesas incluso si tienen éxito. Este comportamiento de fallo rápido es intencional pero puede ser sorprendente cuando necesitas los resultados de las promesas exitosas.

Por qué ocurre

  • Una de las solicitudes paralelas falla mientras otras tienen éxito.
  • Un error de red, timeout o estado HTTP no OK hace que una promesa sea rechazada.
  • Una excepción lanzada dentro de una de las operaciones asíncronas se propaga como un rechazo.

Posibles soluciones

Usa Promise.allSettled() para obtener los resultados de todas las promesas independientemente de los fallos individuales. Filtra los resultados por status === 'fulfilled' para extraer los valores exitosos. Usa Promise.all() solo cuando quieras semántica todo o nada.

Ejemplos

JavaScript

Código que causa el error

const results = await Promise.all([
  fetch("/api/users"),
  fetch("/api/missing-endpoint"),  // returns 404, then .json() throws
  fetch("/api/posts"),
]);

Error en la terminal

Uncaught (in promise) SyntaxError: Unexpected token '<', "<!DOCTYPE..." is not valid JSON

Código corregido

const results = await Promise.allSettled([
  fetch("/api/users").then(r => r.json()),
  fetch("/api/missing-endpoint").then(r => r.json()),
  fetch("/api/posts").then(r => r.json()),
]);
const succeeded = results
  .filter(r => r.status === "fulfilled")
  .map(r => r.value);

Practica en inglés

¿Cómo le explicarías un Promise.all Rejected a un compañero dev? Elige la frase correcta:

"I hit an error...

¿Listo para practicar tu inglés en el trabajo?

Lingua-e tiene ejercicios interactivos basados en conversaciones reales de developers: standups, code reviews, retrospectivas y más. Practica hasta que salga solo.

Prueba Lingua-e gratis