Qué significa Promise.all rechazado y cómo solucionarlo
Referencia del error
Promise.all rechazado
Lenguaje
Severidad
MediaCuá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.
Errores relacionados
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
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...
¿Programando en inglés?
Para arreglar esto, leíste inglés técnico real. Lingua-e tiene ejercicios gratis hechos igual: dailys, code reviews y situaciones reales de trabajo.
Practicar inglés para developers gratis