Using the function* Declaration in JavaScript
The function* declaration is used to define a generator that returns a Generator object. Generators are very powerful for asynchronous programming as they aim to resolve callback problems.
yieldpauses the generator function and returns a value while keeping its state.- The function resumes from where it stopped after the last
yield. next()returns an object withvalueanddoneto move to the next state.
// 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);
Output:
50
100
150
undefinedSyntax:
function* function_name(param1, param2...){ function body}Example 2: This example shows the declaration of a function * and the use of yield and next().
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)
}
Output:
Yielded: 5
Yielded: 25
Yielded: 125
Yielded: 625