Lingua-e
JavaScript

¿Qué significa Promise.all rechazado?

← Errores

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.

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ómo solucionarlo

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.

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);

Errores relacionados

¿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