Skip to main content

Async/Await

Async/Await es azúcar sintáctica sobre Promises que hace que el código asíncrono se vea y se comporte más como código síncrono. Es la forma más moderna y legible de manejar asincronismo en JavaScript.

¿Qué es Async/Await?

Async/await son dos palabras clave que trabajan juntas:
  • async: Declara que una función es asíncrona (retorna una Promise)
  • await: Pausa la ejecución hasta que una Promise se resuelva
await solo puede usarse dentro de funciones async. Intentar usarlo fuera generará un error de sintaxis.

Funciones Async

Una función async siempre retorna una Promise:

Declaraciones de Funciones Async

Usando Await

await pausa la ejecución de la función async hasta que la Promise se resuelva:
Flujo de ejecución:
  1. Se imprime ”⏳ Cargando…”
  2. await fetch() pausa hasta que la petición termine
  3. await response.json() pausa hasta que el JSON se parsee
  4. Se imprime el objeto de datos
  5. Se imprime ”✅ Listo”
Cada await pausa la función, pero no bloquea el hilo principal de JavaScript. Otras operaciones pueden ejecutarse mientras esperas.

Comparación: Promises vs Async/Await

Con Promises (.then)

Con Async/Await

Ventajas de async/await:
  • Más fácil de leer - parece código síncrono
  • Menos anidación
  • Manejo de errores más natural con try/catch
  • Mejor para debugging (call stack más claro)

Manejo de Errores con Try/Catch

Usa bloques try/catch para manejar errores en funciones async:

Try/Catch vs .catch()

Ventajas:
  • Sintaxis familiar
  • Maneja errores síncronos y asíncronos
  • Mejor para múltiples operaciones await

Ejecutar Promises en Paralelo

❌ Incorrecto: Secuencial (Lento)

✅ Correcto: Paralelo (Rápido)

Usando Promise.all() con Async/Await

Si las operaciones no dependen entre sí, ejecútalas en paralelo. De lo contrario, estarás esperando innecesariamente.

Await en Ciclos

For Loop

Paralelo con map()

Ejemplo Completo: Carga de Datos de Usuario

Async/Await con .finally

Puedes usar .finally() con async/await:
O mezclarlo con Promises:

Top-Level Await

En módulos ES6 modernos, puedes usar await en el nivel superior (fuera de funciones async):
Top-level await solo funciona en módulos ES6 (<script type="module"> o archivos .mjs en Node.js).

Buenas Prácticas

1

Siempre usa try/catch

2

Ejecuta en paralelo cuando sea posible

3

No bloquees innecesariamente

Cuándo Usar Async/Await

  • Código nuevo que escribas
  • Múltiples operaciones asíncronas en secuencia
  • Cuando necesitas lógica compleja con await
  • Para mejor legibilidad del código
  • Cuando necesitas usar try/catch
  • Una sola operación asíncrona simple
  • Cuando necesitas encadenar transformaciones
  • APIs que esperan Promises como retorno
  • Cuando Promise.all/race/etc. son más claros

Próximos Pasos

Fetch API

Usa async/await para hacer peticiones HTTP

Ejemplos Asíncronos

Ve ejemplos completos de código asíncrono