Completion requirements
Examples
Using yield
The following code is the declaration of an example generator function.
function* countAppleSales() { const saleList = [3, 7, 5]; for (let i = 0; i < saleList.length; i++) { yield saleList[i]; } }
Once a generator function is defined, it can be used by constructing an iterator as shown.
const appleStore = countAppleSales(); // Generator { } console.log(appleStore.next()); // { value: 3, done: false } console.log(appleStore.next()); // { value: 7, done: false } console.log(appleStore.next()); // { value: 5, done: false } console.log(appleStore.next()); // { value: undefined, done: true }
You can also send a value with next(value)
into the generator. step
evaluates as a
return value in this syntax rv = yield expression
- although a value passed
to the generator's next()
method is ignored the first time next()
is called.
function* counter(value) { let step; while (true) { step = yield value++; if (step) { value += step; } } } const generatorFunc = counter(0); console.log(generatorFunc.next().value); // 0 console.log(generatorFunc.next().value); // 1 console.log(generatorFunc.next().value); // 2 console.log(generatorFunc.next().value); // 3 console.log(generatorFunc.next(10).value); // 14 console.log(generatorFunc.next().value); // 15 console.log(generatorFunc.next(10).value); // 26