Lecciones del módulo (2/4)
async / await
async/await es una sintaxis más clara para trabajar con las Promise: el código se lee como código síncrono,
pero detrás de escena usa exactamente las mismas Promise de la lección anterior.
async function
Una función declarada con async devuelve siempre una Promise.
async function quaranta() {
return 40;
}
quaranta(); // Promise { 40 }
quaranta().then((v) => console.log(v)); // 40Aunque devuelvas un valor "normal", la función lo envuelve en una Promise resuelta.
await
Dentro de una async function puedes poner await delante de una Promise: la ejecución se pausa
hasta que la Promise se resuelva, y luego continúa con el valor resuelto.
async function somma() {
const a = await Promise.resolve(10);
const b = await Promise.resolve(20);
return a + b; // 30
}Equivalente en estilo .then (más verboso):
function somma() {
return Promise.resolve(10).then((a) => Promise.resolve(20).then((b) => a + b));
}await propaga los errores
Si la Promise es rejected, await vuelve a lanzar el error. Puedes capturarlo con un try/catch
normal:
async function leggi() {
try {
const x = await Promise.reject(new Error('no'));
return x;
} catch (err) {
return 'errore: ' + err.message;
}
}
leggi(); // Promise { 'errore: no' }Arrow async
const raddoppia = async (n) => n * 2;
raddoppia(5); // Promise { 10 }Pruébalo tú
Define una `async function addOne(p)` que reciba una Promise de un número y devuelva (como Promise) el número + 1. Usa await.
Mostrar pista
const n = await p; return n + 1;
Solución disponible después de 3 intentos
Ejercicio de repaso
Define `sumTwo(pa, pb)` async: recibe dos Promise de números, devuelve su suma. Usa dos await secuenciales.
Mostrar pista
await ognuna, poi return a + b.
Solución disponible después de 3 intentos