Generadores Node.js y comparación con devoluciones de llamada

En este tutorial, vamos a aprender acerca de los generadores y sus diferencias con callbacks

¿Qué son los generadores?

Los generadores se han vuelto bastante famosos en Node.js en los últimos tiempos y eso probablemente debido a lo que son capaces de hacer.

  • Los generadores son ejecuciones de funciones que pueden suspenderse y reanudarse en un momento posterior.
  • Los generadores son útiles cuando se llevan a cabo conceptos como “ejecución perezosa”. Esto básicamente significa que al suspender la ejecución y reanudar a voluntad, podemos extraer valores solo cuando lo necesitamos.

Los generadores tienen los siguientes 2 métodos clave

  1. Método de rendimiento — El método de rendimiento se llama en una función para detener la ejecución de la función en la línea específica donde se llama al método de rendimiento.
  2. Siguiente método – Este método se llama desde la aplicación principal para reanudar la ejecución de una función que tiene un método de rendimiento. La ejecución de la función continuará hasta el siguiente método de rendimiento o hasta el final del método.

Veamos un ejemplo de cómo se pueden usar los generadores.

En nuestro ejemplo, vamos a tener una simple función Add que agregará 2 números, pero vamos a seguir deteniendo la ejecución del método en diferentes puntos para mostrar cómo se pueden usar los generadores.

Explicación del código: –

  1. El primer paso es definir nuestra “función” del generador. Tenga en cuenta que esto se hace agregando un “*” a la palabra clave function. A continuación, estamos definiendo una función llamada Add que toma un parámetro de x.
  2. La palabra clave yield es específica de los generadores. Esto lo convierte en una construcción poderosa para pausar una función en el medio de cualquier cosa. Así que aquí, la ejecución de la función se detendrá hasta que invocemos la siguiente función (), que se hará en el Step4. En este punto, el valor de x se convertirá en 6 y la ejecución de la función se detendrá.
  3. Aquí es donde primero llamamos a la función del generador y enviamos el valor de 5 a nuestra función Add. Este valor será sustituido en el parámetro x de nuestra función Add.
  4. Una vez que llamamos a la función next (), la función Add () reanudará la ejecución. Cuando se ejecutará la siguiente sentencia var y= yield (null), la función Add () volverá a dejar de ejecutarse.
  5. Ahora, después de llamar a la función next () de nuevo, se ejecutarán las siguientes sentencias, y el valor combinado de x=5 e y=6 será agregado y devuelto.

Devolución de llamada frente a generadores

Los generadores se utilizan para resolver el problema de lo que se conoce como el infierno de devolución de llamada. A veces, las funciones de devolución de llamada se vuelven tan anidadas durante el desarrollo de una aplicación Node.js que simplemente se vuelve demasiado complicado usar funciones de devolución de llamada.

Aquí es donde los generadores son útiles. Uno de los ejemplos más comunes de esto es cuando se crean funciones de temporizador.

Veamos el siguiente ejemplo de cómo los generadores pueden resultar útiles sobre las devoluciones de llamada.

Nuestro ejemplo simplemente creará una función de retardo de tiempo simple. Entonces quisiéramos llamar a esta función incorporando un retardo de 1000, 2000 y 3000 ms.

Paso 1) Defina nuestra función de devolución de llamada con el código de retardo de tiempo necesario.

Explicación del código: –

  1. Aquí estamos creando una función llamada Timedelay con un parámetro llamado ptime. Esto tendrá en el tiempo necesario que queremos introducir en nuestra solicitud.
  2. El siguiente paso es simplemente crear un mensaje, que se mostrará al usuario diciendo que la aplicación va a ser una pausa para estos muchos números de milisegundos.

Paso 2) Ahora veamos el código si estábamos incorporando devoluciones de llamada. Supongamos que queríamos incorporar devoluciones de llamada basadas en el valor de 1000, 2000 y 3000 milisegundos, el siguiente código muestra cómo necesitaríamos implementarlas usando devoluciones de llamada.

Explicación del código: –

  1. Estamos llamando al Timedelay como una devolución de llamada con 1000 como el valor.
  2. A continuación queremos llamar a la función Timedelay de nuevo con 2000 como valor.
  3. Finalmente, queremos llamar a la función Timedelay de nuevo con 3000 como valor.Desde el código anterior, puede ver que se vuelve más complicado ya que queremos comenzar a llamar a la función varias veces.

Paso 3) Ahora veamos cómo implementar el mismo código usando generadores. Desde el siguiente código ahora puede ver lo simple que se ha vuelto implementar la función Timedelay usando generadores.

Explicación del código: –

  1. Primero estamos definiendo una función de generador que se utilizará para llamar a nuestra función Timedelay.
  2. Estamos llamando a la función Rendimiento junto con la función Timedelay con 1000 como valor del parámetro.
  3. A continuación, estamos llamando a la función Rendimiento junto con la función Timedelay con 2000 como valor del parámetro.
  4. Finalmente, estamos llamando a la función Rendimiento junto con la función Timedelay con 3000 como valor del parámetro.

Resumen

Los generadores también se pueden usar para aliviar los problemas con las devoluciones de llamada anidadas y ayudar a eliminar lo que se conoce como el infierno de devolución de llamada. Los generadores se utilizan para detener el procesamiento de una función. Esto se logra mediante el uso del método ‘yield’ en la función asíncrona.

0 replies

Leave a Reply

Want to join the discussion?
Feel free to contribute!

Leave a Reply

Your email address will not be published. Required fields are marked *