DevPath · Aprende a programar ESPTEN

Asincronía: promesas y async/await

El event loop y los callbacks

JavaScript es de un solo hilo

JavaScript ejecuta una sola cosa a la vez. Entonces, ¿cómo descarga un archivo o espera una respuesta del servidor sin "congelarse"? Gracias al event loop.

Las operaciones que tardan (peticiones de red, temporizadores...) se delegan al entorno (el navegador o Node) y JavaScript sigue ejecutando el resto del código. Cuando la tarea termina, su función de respuesta se mete en una cola, y el event loop la ejecuta en cuanto el hilo principal está libre.

console.log("1");
setTimeout(() => console.log("2"), 0); // se aplaza
console.log("3");
// Imprime: 1, 3, 2

Aunque el retraso sea 0, el callback de setTimeout espera a que termine el código actual. Esa es la clave de la asincronía.

Callbacks

Históricamente, las tareas asíncronas se manejaban con callbacks: funciones que pasas para que se llamen "cuando termine".

descargar("datos.json", function (resultado) {
  console.log("Listo:", resultado);
});

El problema: anidar muchos callbacks produce el temido callback hell, código en forma de pirámide difícil de leer. Las promesas nacieron para resolverlo.

Ejemplos

El orden no es el que parece

console.log("Inicio");
setTimeout(() => console.log("Tarea aplazada"), 0);
console.log("Fin");
Pon esto en práctica

DevPath es un curso práctico: aquí lees la teoría; en la app la pones en práctica con ejercicios que se ejecutan de verdad, sin conexión.

Empezar gratis en la app →
Promesas →