Diccionario

Programación asíncrona

Una forma de programar en la que las tareas lentas (red, disco) se lanzan y el programa sigue con otras cosas mientras tanto, en vez de quedarse esperando.

Descargar un archivo o consultar una base de datos tarda. Si el programa se quedara parado esperando, la interfaz se congelaría o el servidor no podría atender a nadie más.

Con código asíncrono la tarea se lanza y el resultado llega más tarde. Las palabras async y await (JavaScript, Python, C#, Rust) o las corrutinas de Kotlin permiten escribirlo casi como código normal.

Un ejemplo

Una app del tiempo pide la previsión con await fetch(...) y, mientras llega, sigue mostrando la animación de carga.

Por qué importa

Hay tareas que tardan: pedir datos a un servidor, leer un archivo grande o esperar a una base de datos. Si el programa se quedara parado esperando, la página se congelaría y el servidor no atendería a nadie más. La programación asíncrona permite iniciar la tarea, seguir con otras cosas y recuperar el resultado cuando esté listo.

Es imprescindible en JavaScript, donde casi toda operación de red es asíncrona, y cada vez más habitual en Python con asyncio, en C# con async/await y en otros lenguajes. Ignorarla lleva a errores muy típicos, como usar un dato antes de que haya llegado.

Confusiones frecuentes

Asíncrono no significa que dos cosas se ejecuten a la vez en paralelo. En JavaScript hay un solo hilo y lo que ocurre es que el trabajo se intercala: mientras se espera la respuesta, el hilo atiende otras tareas. Esa es la diferencia con el paralelismo real, que usa varios núcleos. Un error frecuente es olvidar await y trabajar con una promesa pendiente en lugar de con su resultado, de modo que en pantalla aparece algo como Promise { <pending> }.

Preguntas frecuentes

¿Qué hace `await`?

Pausa la función async hasta que la promesa se resuelva y te da su valor, sin bloquear el resto del programa. Solo puede usarse dentro de funciones declaradas como async.

¿Cómo manejo errores en código asíncrono?

Con try / catch alrededor del await, o con .catch() en una promesa. Si no lo haces, el error puede pasar sin avisar.