Ejercicio sobre función asíncrona

| Última modificación: 18 de marzo de 2024 | Tiempo de Lectura: 3 minutos

Algunos de nuestros reconocimientos:

Premios KeepCoding

En este artículo, exploraremos el concepto de función asíncrona en JavaScript, específicamente enfocándonos en el uso de callbacks para crear bucles asíncronos. Para ello realizaremos un ejercicio sobre función asíncrona. Si bien esta técnica puede ser un poco compleja al principio, existen herramientas, como la librería “async”, que facilitan su implementación.

¿Qué es una función asíncrona y cómo se utilizan los callbacks?

Antes de iniciar nuestro ejercicio sobre función asíncrona, veamos a qué hace referencia este concepto.

En el sector IT, las operaciones asíncronas son muy comunes, ya que permiten que ciertas tareas se ejecuten en segundo plano mientras otras continúan. Cuando se necesita manejar tareas asíncronas en JavaScript, entran en juego las funciones asíncronas y los callbacks.

Una función asíncrona es aquella que no se ejecuta de manera secuencial, sino que se coloca en una pila de llamadas de eventos y se ejecuta cuando el event loop lo permite. Esto hace que el programa siga funcionando mientras se esperan resultados de operaciones asíncronas, como la lectura de bases de datos o la carga de recursos externos.

En JavaScript, las funciones asíncronas se definen con la palabra clave async antes de la palabra clave function. Al utilizar la palabra clave async, se indica que la función devolverá una promesa implícita, que puede resolverse o rechazarse en función del resultado de la operación asíncrona.

Dentro de una función asíncrona, podemos utilizar la palabra clave await antes de una operación asíncrona, como una llamada a una API, una consulta a una base de datos o una solicitud de red. El await pausará la ejecución de la función hasta que la operación asíncrona se complete y luego devolverá el resultado o manejará el error, lo que permitirá un flujo de control más claro y conciso.

Un callback es una función que se pasa como argumento a otra función y que se ejecutará más tarde, generalmente después de que ocurra alguna operación asíncrona. Los callbacks son una herramienta esencial para manejar la asincronía en JavaScript.

Ejercicio sobre función asíncrona

Un ejemplo anterior: función que se ejecuta tras dos segundos

Imagina que queremos crear una función llamada “Escribe tras dos segundos”, que reciba un texto y lo escriba en la consola después de esperar dos segundos. Podríamos implementarla utilizando la función setTimeout, que espera el tiempo especificado antes de ejecutar el código.

//Ejercicio sobre función asíncrona
function escribeTrasDosSegundos(texto) {
  setTimeout(() => {
    console.log(texto);
  }, 2000);
}

Ejercicio sobre función asíncrona: bucle asíncrono con callbacks

Si queremos ejecutar dentro del ejercicio sobre función asíncrona la función “Escribe tras dos segundos” varias veces en serie, podríamos intentar hacerlo con un bucle, pero JavaScript no proporciona bucles asíncronos de forma nativa. Sin embargo, podemos crear nuestra propia solución utilizando callbacks y la recursividad.

//Ejercicio sobre función asíncrona
function bucleAsincronoEnSerie(n, fn, callback) {
  if (n === 0) {
    callback();
    return;
  }
  
  fn(n, () => {
    bucleAsincronoEnSerie(n - 1, fn, callback);
  });
}

La función bucleAsincronoEnSerie en el ejercicio sobre función asíncrona toma tres argumentos:

  • n es el número de veces que se debe ejecutar la función fn en serie.
  • fn es la función que queremos ejecutar.
  • callback es una función que se llamará al final del bucle.

Utilizar la librería async para bucles asíncronos

Si bien crear nuestras propias soluciones es valioso para entender los conceptos, a veces es más práctico utilizar librerías como async, que ofrecen funciones predefinidas para diferentes tipos de bucles asíncronos. La librería “async” proporciona una función timesSeries, que nos permite crear un bucle asíncrono en serie de manera más sencilla y realizar un ejercicio sobre función asíncrona.

//Ejercicio sobre función asíncrona
const async = require('async');

function escribeTrasDosSegundos(texto, callback) {
  setTimeout(() => {
    console.log(texto);
    callback();
  }, 2000);
}

const veces = 5;

async.timesSeries(veces, (n, next) => {
  escribeTrasDosSegundos(`Texto ${n}`, next);
}, () => {
  console.log('Fin');
});

Con async.timesSeries, simplemente especificamos la cantidad de veces que queremos ejecutar la función, la función que se ejecutará en cada iteración y una función final que se llamará cuando el bucle termine. De esta manera, podemos crear bucles asíncronos en serie de manera más eficiente y legible.

¡Sigue aprendiendo con KeepCoding!

Las funciones asíncronas y los callbacks son herramientas fundamentales para manejar tareas asíncronas en JavaScript. Aunque crear bucles asíncronos con callbacks puede ser un poco complejo, existen librerías como “async” que simplifican esta tarea. Ahora estás listo para enfrentarte a operaciones asíncronas en tus proyectos y aprovechar al máximo el potencial de JavaScript en el sector IT.

Si quieres seguir con tu proceso de aprendizaje, no dudes en contactarnos para unirte a nuestro Desarrollo Web Full Stack Bootcamp, donde aprenderás todo lo necesario para incursionar en un mercado laboral lleno de oportunidades. ¡Inscríbete ya y descubre cómo cambiar tu futuro!

Alberto Casero

Alberto Casero es CTO en Watium, Fundador de Kas Factory & Coordinador del Bootcamp en Desarrollo Web.

Posts más leídos

¡CONVOCATORIA ABIERTA!

Desarrollo Web

Full Stack Bootcamp

Clases en Directo | Profesores en Activo | Temario 100% actualizado