Iteradores asíncronos vs generadores asincrónicos en JavaScript

Iteradores asíncronos vs generadores asincrónicos en JavaScript
Puede encontrarse en una situación en la que se requiere procesar inmediatamente algunos eventos secuenciales en lugar de esperar hasta que todos los eventos se generen, por ejemplo, reciban datos a través de una red donde se obtiene un paquete a la vez. En tal situación, Bibliotecas JavaScript como Rxjs puede ayudar a manejar el datos asíncronos; Sin embargo, también ponen adicionales gastos generales con respecto a la complejidad del código y el esfuerzo cognitivo requerido para dominarlos.

En JavaScript, Iteradores asíncronos y Generadores asincrónicos Ofrezca la misma funcionalidad que podría implementarse de manera efectiva utilizando las primitivas de lenguaje JavaScript. Entonces, ¿por qué no elegir una solución simple en lugar de ponerse en otra confusión??

Esta publicación discute los iteradores asíncronos frente a los generadores asíncronos en JavaScript junto con ejemplos adecuados. Entonces, comencemos!

Iteradores en JavaScript

En JavaScript, "Iteradores"Se utilizan para acceder a estructuras de datos síncronos, como matrices, mapas y conjuntos. Se basan principalmente en el "próximo()"Método, que comprende dos propiedades:"próximo" y "valor":

  • El "valor"Propiedad del próximo() El método indica el valor actual en la secuencia de iteración.
  • El "hecho"Propiedad del próximo() El método representa el estado de iteración, donde "FALSO"Indica que el proceso de iteración se completa y"verdadero"Significa que la iteración está incompleta.

Ahora, revisaremos el funcionamiento de los iteradores en JavaScript con la ayuda de un ejemplo.

Ejemplo: Uso de iteradores en JavaScript

Crearemos un "números"Objeto que tiene dos propiedades:"comenzar" y "fin". Entonces, agregaremos un "capacidad de iteración" hacia "números"Objeto utilizando el"Símbolo.iterador ()" método.

El "Símbolo.iterador ()"El método se invocará una vez, al comienzo del"por ... deBucle y devuelve un objeto iterable. Después de realizar esta operación, el "por ... deEl bucle accederá al objeto Iterable y obtendrá los valores en la secuencia de iteración:

Dejar numbe =
Inicio: 1,
Fin: 4,
[Símbolo.iterador] ()
devolver
actual: esto.comenzar,
Último: esto.fin,
próximo()
si esto.actual <= this.last)
return hecho: falso, valor: esto.corriente ++;
demás
return ded: true;


;

;

El mencionado anteriormente, "próximo()"El método se invocará y devolverá el"valor"Como objeto:

para (dejar valor de números)
alerta (valor);

Escriba el código proporcionado en la ventana de la consola y ejecutelo:

Hemos iterado con éxito sobre cada elemento del "númerosObjeto que se puede ver en el siguiente GIF:

Como se mencionó anteriormente, los iteradores de JavaScript regulares pueden ayudarlo a iterar sobre los datos sincrónicos. ¿Qué pasa si los valores vienen de forma asincrónica por cualquier retraso?? En tal escenario, debe implementar el Iteradores asíncronos en JavaScript.

Iteradores asíncronos en JavaScript

Los iteradores asincrónicos están integrados en ES9 para manejar las fuentes de datos asíncronas. Funciona de manera similar al iterador regular, excepto que el "próximo()"El método en un iterador asíncrono devuelve un"Promesa"Eso resuelve el"valor" y "hecho"Valores de propiedades de un objeto.

Convertir iterador regular al iterador asíncrono en JavaScript

Si desea convertir un iterador regular a un iterador asíncrono, siga las instrucciones dadas a continuación:

  • En lugar de usar el "Símbolo.Iterador ()"Método, utilizar"Símbolo.asynciterator ()".
  • Forzar el "próximo()Método para devolver un Promesa y agregar un "asíncrata"Palabra clave con él como:"Async Next ()".
  • Por último, el "Por esperanza ... de"El bucle se puede usar para iterar sobre un objeto, en lugar del"por ... de" bucle.

Ejemplo: iteradores asíncronos en JavaScript

Ahora convertiremos el iterador regular definido en el ejemplo anterior a iteradores asíncronos siguiendo las reglas especificadas.

Para este propósito, reemplazaremos el "Símbolo.Iterador ()" con el "Símbolo.asynciterator ()" método. Luego, agregaremos la palabra clave "asíncrata" antes de "próximo()" método. Usando "esperar" en el "próximo()"El método establecerá el tiempo para cumplir la promesa después"2" segundos:

Dejar numbe =
Inicio: 1,
Fin: 4,
[Símbolo.asynciterator] ()
devolver
actual: esto.comenzar,
Último: esto.fin,
async next ()
awaitnewpromise (resolve => setTimeOut (resolve, 2000));
si esto.actual <= this.last)
return hecho: falso, valor: esto.corriente ++;
demás
return ded: true;


;

;

Para la iteración sobre un objeto iterable asincrónico, el "Por esperanza ... deEl bucle se utilizará de la siguiente manera:

(async () =>
para esperar (vamos al valor de los números)
alerta (valor);
) ()

La salida mostrará los valores iterados en el cuadro de alerta después de un retraso de dos segundos:

En este punto, has entendido el funcionamiento de los iteradores asíncronos. Ahora, avanzaremos y aprenderemos sobre Generadores asincrónicos en JavaScript.

Generadores en JavaScript

Los iteradores en JavaScript son bastante útiles; Sin embargo, necesitan una programación cuidadosa para realizar su funcionalidad esperada. El Función del generador de JavaScript es otra herramienta poderosa que le permite definir un algoritmo iterativo con la ayuda de un solo "no continuo" función.

Inicialmente, una función de generador no ejecuta su código cuando se invoca; En cambio, devuelve un tipo específico de iterador conocido como "Generador". La función del generador se puede invocar tantas veces como sea necesario, y en cada llamada, devuelve un nuevo "Generador,"Lo que se puede iterar una vez.

Para escribir la función del generador, el "función*Se usa la sintaxis. Esta función también comprende un "producir"Operador que detiene la ejecución de la función del generador hasta que se solicite el siguiente valor de un objeto.

Ejemplo: Uso de generadores en JavaScript

Definiremos un "generador"Función que devuelve los valores de un"punto de partida" a "punto final" utilizando el "producir"Operador. El "*"Agregado con el"función"La palabra clave indica que"generador()"Es una función de generador, no una función normal normal.

function* generador (startingpoint, EndingPoint)
para (deje que i = startingpoint; yo<= endingPoint; i++)
rendimiento i;

En el siguiente paso, invocaremos el "generador()"Función que devuelve un generador almacenado en el"X" objeto:

Sea x = generador (1, 5);

Por último, para iterar sobre el "X"Generador, usaremos el"por ... de" bucle:

para (const num de x)
consola.log (num);

La ejecución del programa proporcionado mostrará los valores iterados:

Si desea recuperar resultados basados ​​en la promesa del "Generador", Tienes que usar"Generador asíncrono"En el programa JavaScript.

Generadores asincrónicos en JavaScript

Generador asíncrono en JavaScript funciona de manera similar a la función del generador, excepto que el "próximo()"El método en el generador asíncrono devuelve un"Promesa"Eso resuelve el"valor" y "hecho"Valores de propiedades de un objeto.

Convertir la función del generador en iterador asíncrono en JavaScript

Siga las instrucciones dadas a continuación para convertir una función de generador en un iterador asíncrono en JavaScript:

  • Usar "asíncrata" antes de "función*Palabra clave.
  • En lugar de un "valor","producir"Debería devolver un"Promesa".

Ahora, le mostraremos el procedimiento práctico para convertir una función de generador en generadores asíncronos en JavaScript.

Ejemplo: Generadores asíncronos en JavaScript

En primer lugar, agregaremos el "asíncrata"Palabra clave antes de definir el"AsyncSequence ()"Función asíncrona. El asyncSequence () produce un "Promesa"Que se cumplirá en un segundo:

asyncfunction* asyncSequence (startingpoint, EndingPoint)
para (dejar i = startingpoint; i
setTimeOut (() =>
resolver (i);
, 1000);
);

Por último, "Por esperanza ... deEl bucle se usa para iterar y devolver el generador asincrónico:

(async () =>
Sea x = asyncSequence (1, 5);
para esperar (deja num de x)
consola.log (num);

) ();

Este programa JavaScript devolverá los valores de "1" a "5"Mientras tomaba una brecha de"uno" segundo:

Hemos proporcionado la información esencial relacionada con Iteradores asíncronos y Generadores asincrónicos. Sin embargo, ambos se pueden usar para iterar sobre datos asincrónicos en JavaScript; Puede ser un desafío para los principiantes mantener la lógica o la definición interna de los iteradores asíncronos, mientras que los generadores asíncronos ofrecen más eficiente y menos propenso a errores forma de utilizar iteradores. También esconde el complejidad del iterador y hace que el código sea conciso y legible.

Entonces, te recomendamos Use generadores asincrónicos para manejar iteraciones relacionadas con la recopilación de datos asincrónicos.

Conclusión

Iterador asíncronoarena Generadores asincrónicos se utilizan para iterar sobre los datos, proporcionados después de una cierta cantidad de tiempo. Los iteradores asíncronos ejecutan el "Símbolo.asynciterator ()"Método para devolver un"iterador", Mientras que los generadores asincrónicos devuelven un tipo especial de iterador"Generador"Por sí mismo, que se puede usar donde sea que se requiera la iteración. Este artículo discutió iteradores asíncronos y generadores asincrónicos en JavaScript.