Promesas en JavaScript: encadenado limpio y manejo de errores

Domina `then/catch/finally`, composición de promesas y patrones para evitar callback hell.

Una promesa representa un resultado futuro (éxito o error).

Encadenar bien evita lógica anidada y mejora legibilidad.

El error debe gestionarse explícitamente con `catch`.

Composición con `Promise.all` permite paralelizar tareas independientes.

  • pending -> fulfilled o rejected.
  • Mientras está `pending`, aún no tienes valor final. Cuando se resuelve, pasa a `fulfilled`; si falla, a `rejected`.
  • Tu código debe contemplar ambos caminos para no dejar errores silenciados.
  • Cada `then` recibe la salida del anterior.
  • Devuelve valor o promesa desde `then`.

Estados y ciclo de una promesa

pending -> fulfilled o rejected.

Mientras está `pending`, aún no tienes valor final. Cuando se resuelve, pasa a `fulfilled`; si falla, a `rejected`.

Tu código debe contemplar ambos caminos para no dejar errores silenciados.

Encadenar transformaciones con then

Cada `then` recibe la salida del anterior.

  • Devuelve valor o promesa desde `then`.
  • No mezcles callbacks anidados innecesarios.
  • Centraliza el manejo de error en un `catch` final.

Componer promesas en paralelo

Si tareas son independientes, ejecútalas juntas.

`Promise.all` espera a que todas las promesas se resuelvan. Si una falla, rechaza el conjunto.

Úsalo para cargar recursos en paralelo y reducir tiempo total de espera.

JavaScript
35

Promesas en JavaScript: encadenado limpio y manejo de errores

Domina `then/catch/finally`, composición de promesas y patrones para evitar callback hell.

Código del tema: new Promise | then | catch | finally | Promise.all

📘 Teoría

Estados y ciclo de una promesa

pending -> fulfilled o rejected.

1

Mientras está `pending`, aún no tienes valor final. Cuando se resuelve, pasa a `fulfilled`; si falla, a `rejected`.

2

Tu código debe contemplar ambos caminos para no dejar errores silenciados.

Promesa básica
const p = new Promise((resolve, reject) => {
  const ok = true;
  if (ok) resolve('Datos listos');
  else reject(new Error('Fallo al cargar'));
});

p.then((msg) => console.log(msg)).catch((err) => console.error(err.message));

Encadenar transformaciones con then

Cada `then` recibe la salida del anterior.

  • Devuelve valor o promesa desde `then`.
  • No mezcles callbacks anidados innecesarios.
  • Centraliza el manejo de error en un `catch` final.
Pipeline de promesas
Promise.resolve(5)
  .then((n) => n * 2)
  .then((n) => n + 1)
  .then((n) => console.log('resultado:', n))
  .catch((err) => console.error('error:', err.message));

Componer promesas en paralelo

Si tareas son independientes, ejecútalas juntas.

1

`Promise.all` espera a que todas las promesas se resuelvan. Si una falla, rechaza el conjunto.

2

Úsalo para cargar recursos en paralelo y reducir tiempo total de espera.

Paralelización con Promise.all
const p1 = Promise.resolve('perfil');
const p2 = Promise.resolve('cursos');

Promise.all([p1, p2])
  .then(([perfil, cursos]) => {
    console.log('ok:', perfil, cursos);
  })
  .catch((err) => {
    console.error('fallo:', err.message);
  });

🧪 Aprende probando

Ejemplo Ejemplo guiado: cadena con recuperación de error Maneja error y cierre final con `finally`.

🏁 Retos

Reto Reto: convertir callback mental a promesa Crea una promesa que se resuelva tras timeout y encadena el resultado.

🧰 Recursos

Test

Comprueba tus conocimientos con un test sobre JavaScript.

Test de JavaScript

¿Qué es esto?

Soy Cristian Eslava y a veces hago webs para procrastinar yo y vosotros 😉.

Esta la hice en febrero de 2026 para facilitar el aprendizaje de mis alumnxs. Aprender desarrollo web practicando. La idea es que crezca semanalmente con nuevos temas, tests y retos.

Inspirado en MDN, en W3Schools, en Codepen, en el crack de Manz y en mil sitios de documentación sobre desarrollo web. Quería aportar además de bloques teóricos con ejemplos, la gamificación de los retos y el sistema de test que ya tenía en culTest .

Si te gustó, si no te gustó, si quieres saludarme, o invitarme a 🍻 no dudes en escribirme en cristianeslava@gmail.com .