Generator.prototype.next()
The next()
method returns an
object with two properties done
and value
. You can also
provide a parameter to the next
method to send a value to the
generator.
Syntax
next(value)
Parameters
value
-
The value to send to the generator.
The value will be assigned as a result of a
yield
expression. For example, invariable = yield expression
, the value passed to the.next()
function will be assigned tovariable
.
Return value
An Object
with two properties:
done
(boolean)-
Has the value
true
if the iterator is past the end of the iterated sequence. In this casevalue
optionally specifies the return value of the iterator.Has the value
false
if the iterator was able to produce the next value in the sequence. This is equivalent of not specifying thedone
property altogether. value
-
Any JavaScript value returned by the iterator. Can be omitted when
done
istrue
.
Examples
Using next()
The following example shows a simple generator and the object that the
next
method returns:
function* gen() {
yield 1;
yield 2;
yield 3;
}
const g = gen(); // "Generator { }"
g.next(); // "Object { value: 1, done: false }"
g.next(); // "Object { value: 2, done: false }"
g.next(); // "Object { value: 3, done: false }"
g.next(); // "Object { value: undefined, done: true }"
Using next() with a list
function* getPage(pageSize = 1, list) {
let output = [];
let index = 0;
while (index < list.length) {
output = [];
for (let i = index; i < index + pageSize; i++) {
if (list[i]) {
output.push(list[i]);
}
}
yield output;
index += pageSize;
}
}
list = [1, 2, 3, 4, 5, 6, 7, 8]
var page = getPage(3, list); // Generator { }
page.next(); // Object {value: (3) [1, 2, 3], done: false}
page.next(); // Object {value: (3) [4, 5, 6], done: false}
page.next(); // Object {value: (2) [7, 8], done: false}
page.next(); // Object {value: undefined, done: true}
Sending values to the generator
In this example, next
is called with a value.
Note that the first call does not log anything, because the generator was not yielding anything initially.
function* gen() {
while (true) {
let value = yield null;
console.log(value);
}
}
const g = gen();
g.next(1);
// "{ value: null, done: false }"
g.next(2);
// 2
// "{ value: null, done: false }"
Specifications
Specification |
---|
ECMAScript Language Specification # sec-generator.prototype.next |
Browser compatibility
BCD tables only load in the browser