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):
const p1 = Promise.resolve(42);
const p2 = Promise.reject(new Error('oops'));Leer el resultado: .then / .catch
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.
Promise.resolve(5)
.then((n) => n * 2)
.then((n) => n + 1)
.then((n) => console.log(n)); // 11Si cualquiera de los .then lanza un error (o devuelve una Promise que falla), salta al primer .catch siguiente.
Constructor (poco común)
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ú
Define `promisedVersion(n)` que, dado un número, devuelva una Promise resuelta con el doble de n.
Mostrar pista
return Promise.resolve(n * 2)
Solución disponible después de 3 intentos
Ejercicio de repaso
Define `incrementThree(p)` que reciba una Promise de un número y devuelva una Promise del número + 3. Usa una cadena .then.
Mostrar pista
p.then((n) => n + 3)
Solución disponible después de 3 intentos