If you have an generator like,
function* f () {
// Before stuff.
let a = yield 1;
let b = yield 2;
return [a,b];
}
And, then run
var g = f();
// this question is over this value.
g.next(123); // returns: { value: 1, done: false }
g.next(456); // returns: { value: 2, done: false }
g.next(); // returns: { value: [ 456, undefined ], done: true }
The first call to .next()
to set a
to 123
and the second call to set b
to 456
, however at the last call to .next()
this is return,
{ value: [ 456, undefined ], done: true }
Does the argument in the first call to g.next
get lost? What happens to them? Using the above example, how do I set a
?
Try:
From MDN Iterators and generators.
Answers:
Since there is no
last yield expression that paused the generator
on the first call this value is essentially ignored. You can read more in the ECMAScript 2015 Language Specification.On subsequent calls of
next()
the value passed will be used asthe return value of the last yield expression that paused the generator
.You can do as LJHarb suggested.
Values passed into the first 'next()' call are ignored. Look at the last test (line 34) on this ES6 TDD Coding Kata
For those confused on how
a
&b
are getting set, it might be a good idea to look at the "Advanced Generators" section of Iterators & Generators