Generator.prototype.next()
Baseline
Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since September 2016.
The next() method of Generator instances 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()
next(value)
Parameters
valueOptional-
The value to send to the generator.
The value will be assigned as a result of a
yieldexpression. For example, invariable = yield expression, the value passed to the.next()function will be assigned tovariable.
Return value
An Object with two properties:
Exceptions
TypeError-
Thrown if the generator is already running.
Examples
>Using next()
The following example shows a generator and the object that the
next method returns:
function* gen() {
yield 1;
yield 2;
yield 3;
}
const g = gen(); // Generator { }
g.next(); // { value: 1, done: false }
g.next(); // { value: 2, done: false }
g.next(); // { value: 3, done: false }
g.next(); // { value: undefined, done: true }
Using next() with a list
In this example, getPage takes a list and "paginates" it into chunks of size pageSize. Each call to next will yield one such chunk.
function* getPage(list, pageSize = 1) {
for (let index = 0; index < list.length; index += pageSize) {
yield list.slice(index, index + pageSize);
}
}
const list = [1, 2, 3, 4, 5, 6, 7, 8];
const page = getPage(list, 3); // Generator { }
page.next(); // { value: [1, 2, 3], done: false }
page.next(); // { value: [4, 5, 6], done: false }
page.next(); // { value: [7, 8], done: false }
page.next(); // { value: undefined, done: true }
Sending values to the generator
In this example, next is called with a value.
Note: The first call does not log anything, because the generator was not yielding anything initially.
function* gen() {
while (true) {
const value = yield;
console.log(value);
}
}
const g = gen();
g.next(1); // Returns { value: undefined, done: false }
// No log at this step: the first value sent through `next` is lost
g.next(2); // Returns { value: undefined, done: false }
// Logs 2
Specifications
| Specification |
|---|
| ECMAScript® 2026 Language Specification> # sec-generator.prototype.next> |
Browser compatibility
Loading…