Generator.prototype.next()
BaselineWidely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since September 2016.
Thenext()
method ofGenerator
instances returns anobject with two propertiesdone
andvalue
. You can alsoprovide a parameter to thenext
method to send a value to thegenerator.
Syntax
next()next(value)
Parameters
value
OptionalThe value to send to the generator.
The value will be assigned as a result of a
yield
expression. Forexample, invariable = yield expression
, the valuepassed to the.next()
function will be assigned tovariable
.
Return value
AnObject
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 thenext
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 sizepageSize
. Each call tonext
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 lostg.next(2); // Returns { value: undefined, done: false }// Logs 2
Specifications
Specification |
---|
ECMAScript® 2026 Language Specification # sec-generator.prototype.next |