La declaración de función* se usa para definir un generador que devuelve un objeto Generador. Los generadores son muy potentes para la programación asincrónica, ya que tienen como objetivo resolver los problemas de devolución de llamada.
En un generador, se usa la palabra clave yield en lugar de return. La declaración de rendimiento suspende la ejecución de la función y devuelve un valor a la persona que llama, pero retiene suficiente estado para permitir que la función se reanude desde el último estado de ejecución. La función, por lo tanto, continúa la ejecución inmediatamente después de la última ejecución de rendimiento. El método next() se usa para devolver un objeto con dos propiedades, done y value, y se puede usar para pasar al siguiente estado del generador.
Sintaxis:
function* function_name(param1, param2...) { function body }
Los siguientes ejemplos demuestran el uso de la declaración de función*.
Ejemplo 1:
HTML
<html> <body> <script> // Declaring a generator function function* generator(i) { yield i; yield i + 50; yield i + 100; } // Initialize the generator const generate = generator(50); // Console out the object returned // by the next() method let nextValObj = generate.next(); // Console out the value of the object console.log(nextValObj.value); // Console out next iterations // of the generator console.log(generate.next().value); console.log(generate.next().value); // This value would be undefined as // the last defined one is i + 100 console.log(generate.next().value); </script> </body> </html>
Producción:
50 100 150 undefined
Ejemplo 2:
HTML
<html> <body> <script> function* powerup(n) { for (let num = n; ; num *= n) { // Yield out the current number yield num; } } for (let power of powerup(5)) { // Break if the number is // more than 1024 if (power > 1024) break; console.log("Yielded:", power) } </script> </body> </html>
Producción:
Yielded: 5 Yielded: 25 Yielded: 125 Yielded: 625
Publicación traducida automáticamente
Artículo escrito por priyavermaa1198 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA