Generator.prototype.next()

next() メソッドは、2つのプロパティ donevalue を持つオブジェクトを返します。 next メソッドに引数を提供して、ジェネレーターへ値を送ることもできます。

構文

gen.next(value)

引数

value
ジェネレーターへ送る値です。 generator.
この値は yield 式の結果として代入されます。例えば variable = yield expression の場合、 .next() 関数に渡された値は variable に代入されます。

返値

以下の2つのプロパティを持った Object です。

done (boolean)
イテレーターが反復されるシーケンスの末尾を過ぎていた場合は true の値になります。この場合は value はイテレーターの返値も示します。
イテレーターがシーケンス内で次の値を生成することができた場合は false の値になります。これは done プロパティを完全に指定しないことと同等です。
value
イテレーターから返される JavaScript の値です。 donetrue の場合が省略することができます。

next() の使用

次の例では、 next メソッドが返す簡単なジェネレーターとオブジェクトを示します。

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 }"

リストでの next() の使用

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}

ジェネレーターへ値を送る

この例では next を値付きで呼び出しています。

なお、最初の呼び出しではジェネレーターが何も生成していないため、何もログを記録しないことに注意してください。

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 }"

仕様書

仕様書
ECMAScript (ECMA-262)
Generator.prototype.next の定義

ブラウザーの互換性

Update compatibility data on GitHub
デスクトップモバイルサーバー
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewAndroid 版 ChromeAndroid 版 FirefoxAndroid 版 OperaiOSのSafariSamsung InternetNode.js
nextChrome 完全対応 39Edge 完全対応 13Firefox 完全対応 26IE 未対応 なしOpera 完全対応 26Safari 完全対応 10WebView Android 完全対応 39Chrome Android 完全対応 39Firefox Android 完全対応 26Opera Android 完全対応 26Safari iOS 完全対応 10Samsung Internet Android 完全対応 4.0nodejs 完全対応 あり

凡例

完全対応  
完全対応
未対応  
未対応

関連情報