Saltar al contenido principal
eLearner.app
Módulo 7 · Lección 1 de 425/32 en el curso~12 min
Lecciones del módulo (1/4)

Promesas: qué son

Una Promise es un valor que representa el resultado de una operación que terminará en el futuro. Puede estar en tres estados:

  • pending — la operación está todavía en curso
  • fulfilled — terminó con éxito, hay un valor
  • rejected — falló, hay un error

Una vez que sale del estado pending, queda "decidida" para siempre.

Crear una Promise resuelta

Las dos formas más comunes (casi nunca crearás una Promise "a mano" con el constructor):

JS
const p1 = Promise.resolve(42);
const p2 = Promise.reject(new Error('oops'));

Leer el resultado: .then / .catch

JS
Promise.resolve(10).then((v) => {
  console.log(v); // 10
});

Promise.reject(new Error('no')).catch((e) => {
  console.log(e.message); // 'no'
});

.then recibe una función que se llama con el valor resuelto. .catch recibe una función llamada con el error en caso de rejection.

Concatenar

Cada .then devuelve a su vez una Promise: puedes encadenarlos para transformar el valor paso a paso.

JS
Promise.resolve(5)
  .then((n) => n * 2)
  .then((n) => n + 1)
  .then((n) => console.log(n)); // 11

Si cualquiera de los .then lanza un error (o devuelve una Promise que falla), salta al primer .catch siguiente.

Constructor (poco común)

JS
const p = new Promise((resolve, reject) => {
  if (Math.random() > 0.5) resolve('ok');
  else reject(new Error('no'));
});

Lo usarás solo cuando necesites "promisificar" algo que use callbacks (por ejemplo, APIs antiguas del DOM o setTimeout).

Pruébalo tú

Ejercicio#js.m7.l1.e1
Intentos: 0Cargando...

Define `promisedVersion(n)` que, dado un número, devuelva una Promise resuelta con el doble de n.

Cargando editor...
Mostrar pista

return Promise.resolve(n * 2)

Solución disponible después de 3 intentos

Ejercicio de repaso

Ejercicio#js.m7.l1.e2
Intentos: 0Cargando...

Define `incrementThree(p)` que reciba una Promise de un número y devuelva una Promise del número + 3. Usa una cadena .then.

Cargando editor...
Mostrar pista

p.then((n) => n + 3)

Solución disponible después de 3 intentos