Promises y Async/Await
Algunas operaciones — obtener datos de un servidor, leer un archivo, esperar un temporizador — no terminan de inmediato. JavaScript maneja esto con una Promise: un valor que representa algo que se completará más tarde, ya sea con éxito o con un error.
function delay(ms) {
return new Promise((resolve) => setTimeout(resolve, ms));
}
console.log("Starting...");
delay(100).then(() => {
console.log("100ms have passed");
});Starting... 100ms have passed
delay(100) devuelve una Promise de inmediato, sin bloquear nada — "Starting..." se imprime al instante. .then() registra una función para ejecutarse una vez que la promesa se resuelve, lo cual ocurre 100ms después cuando termina el temporizador.
async/await — escribir código async que se lee como código síncrono
await pausa una función en esa línea hasta que la promesa se resuelve, sin bloquear el resto del programa — simplemente hace que el código asíncrono se lea de arriba a abajo, en vez de anidar callbacks dentro de .then().
function delay(ms) {
return new Promise((resolve) => setTimeout(resolve, ms));
}
async function main() {
console.log("Starting...");
await delay(100);
console.log("100ms have passed");
}
main();Starting... 100ms have passed
Mismo resultado que la versión con .then() de arriba, pero async/await generalmente se considera más fácil de leer cuando tienes más de un paso asíncrono seguido. Una función marcada como async siempre devuelve una Promise, y await solo se puede usar dentro de una.
Siguiente: módulos y la librería estándar — organizar código entre archivos, y qué viene integrado.
Ejercicio de práctica
Escribe una función async getValue() que devuelva 42, y luego espérala (await) dentro de otra función async e imprime el resultado.