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