Saltar al contenido principal
Publicado el

Async/Await en JavaScript

Compartir:

Introducción

La introducción de async y await en JavaScript ES7 marcó un avance significativo en la forma de escribir y gestionar código asíncrono. Este artículo explora en detalle cómo utilizar async y await para manejar diversas situaciones asíncronas, con énfasis en patrones avanzados y buenas prácticas.

Conceptos Fundamentales de Async/Await

Async

Una función declarada como async devuelve implícitamente una Promise, y el valor devuelto por la función se utiliza para resolver dicha Promise.

async function operacionAsincrona() {
  return 'Resultado';
}

// Devuelve una Promise que se resuelve con 'Resultado'

Await

Await se utiliza dentro de funciones async para pausar la ejecución de la función hasta que la Promise se resuelva o sea rechazada.

async function obtenerDatos(url) {
  let respuesta = await fetch(url);
  let datos = await respuesta.json();

  return datos;
  // La ejecución se pausa hasta que la Promise de fetch se resuelva
}

Patrones Avanzados de Uso

Ejecución Paralela

Para ejecutar operaciones asíncronas en paralelo, puedes usar Promise.all con await.

async function cargarDatosParalelos(urls) {
  let promises = urls.map((url) => fetch(url).then((res) => res.json()));
  return await Promise.all(promises);
}

Await en un Bucle

Aunque en general se recomienda evitar await dentro de bucles, en ciertos casos, como cuando las operaciones deben ser secuenciales, puede ser necesario.

async function procesamientoSecuencial(urls) {
  for (let url of urls) {
    let datos = await fetch(url).then((res) => res.json());
    console.log(datos);
  }
}

Manejo de Errores con Async/Await

El manejo de errores en funciones async se realiza mediante bloques try-catch.

Capturando Errores

async function cargarDatos(url) {
  try {
    let respuesta = await fetch(url);
    return await respuesta.json();
  } catch (error) {
    console.error('Error al cargar datos:', error);
  }
}

Buenas Prácticas y Consejos

  1. Usa Async/Await en Contextos Adecuados: Evita usar async y await para operaciones simples que no se benefician de la asincronía.
  2. Evita el Await Innecesario: No uses await con operaciones que ya son síncronas, ya que esto puede introducir retrasos innecesarios.
  3. Combina con Promises cuando sea Necesario: En situaciones complejas, combinar async/await con la API tradicional de Promises puede ofrecer mayor flexibilidad.
  4. Usa Async/Await para Simplificar el Código Asíncrono: En lugar de encadenar varias Promises con .then(), considera reestructurar el código usando async/await para mayor claridad.

Desmitificando Async/Await

Errores Comunes

  • Olvidar await: Olvidar agregar await puede provocar comportamientos inesperados, ya que el código siguiente puede ejecutarse antes de que finalice la operación asíncrona.
  • Bloqueo Involuntario: El uso inadecuado de await puede bloquear la ejecución de otras operaciones asíncronas importantes.

Uso en Funciones Anónimas

Async/await también puede usarse en funciones anónimas:

document.addEventListener('click', async function () {
  let datos = await cargarDatos('https://api.ejemplo.com');
  console.log(datos);
});

Conclusión

Async y await han transformado el enfoque de la programación asíncrona en JavaScript, haciendo que el código sea más intuitivo y fácil de seguir. Entender cómo aplicar estos conceptos de manera eficiente es fundamental para cualquier desarrollador que trabaje con JavaScript, especialmente en aplicaciones web modernas que dependen en gran medida de operaciones asíncronas.

Happy coding!