Lingua-e
JavaScript

¿Qué significa UnhandledPromiseRejection?

← Errores

Un UnhandledPromiseRejection ocurre cuando una Promise es rechazada pero ningún manejador .catch() o try/catch dentro de una función async captura el error. En Node.js, por defecto en versiones recientes, termina el proceso. En navegadores, dispara el evento unhandledrejection.

Por qué ocurre

  • Llamar a una función async sin esperarla ni adjuntarle un manejador .catch().
  • Una llamada awaited lanza un error dentro de una función async que no tiene un try/catch envolvente.
  • Una cadena de Promises que lanza un error en un callback .then() pero la cadena no tiene .catch() al final.
  • Olvidar retornar una Promise desde una función, dejando una promesa flotante en una cadena.

Ejemplos

JavaScript

Código que causa el error

async function fetchUser(id) {
  const res = await fetch(`/api/users/${id}`);
  if (!res.ok) throw new Error(`HTTP ${res.status}`);
  return res.json();
}

// Called without catch: rejection is unhandled
fetchUser(999);

Error en la terminal

UnhandledPromiseRejection: Error: HTTP 404

Cómo solucionarlo

Siempre adjunta un .catch() a cada cadena de Promises, o usa try/catch dentro de funciones async. Configura un manejador global (process.on('unhandledRejection', ...) en Node.js o window.addEventListener('unhandledrejection', ...) en el navegador) como red de seguridad para registrar rechazos inesperados. Nunca dejes una promesa flotante que descarte su resultado.

Código corregido

async function fetchUser(id) {
  const res = await fetch(`/api/users/${id}`);
  if (!res.ok) throw new Error(`HTTP ${res.status}`);
  return res.json();
}

// Always handle the rejection
fetchUser(999).catch((err) => {
  console.error("Failed to fetch user:", err.message);
});

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