AnyCompiler

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");
});
Output
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();
Output
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.