なんだかGoodVibes

日々の勉強メモです。

【Node】ジェネレータ入門

こんにちは。
本日はジェネレータについてのメモです。

概要

ジェネレータについて簡単に言うと
yeildにより関数を抜けたり再開したりすることができる関数です。
ジェネレータの作成は、function*と記載するだけです。

ジェネレータはnext()メソッドでジェネレータを実行し、
結果を表すオブジェクトを返します。


サンプル

function* sampleGeneretor() {
    yield 'item1';
    yield 'item2';
    return 'item3';
}

const generator = sampleGeneretor();
console.log(generator.next());
console.log(generator.next());
console.log(generator.next());

結果は以下です。

{ value: 'item1', done: false }
{ value: 'item2', done: false }
{ value: 'item3', done: true }

next()の呼び出し毎に処理が進んでいるのがわかりますね。
doneは処理が完了するまでfalseとなっていて、
処理が最後まで実行されるとtrueになっています。


ジェネレータを使って配列を処理する

ジェネレータを使用すると配列の各要素毎に処理を行う事ができます。

function* sampleGeneretor(arr) {
    for (let i = 0; i < arr.length; i++) {
        yield arr[i];
    }

    return;
}

const generator = sampleGeneretor(['item1', 'item2', 'item3']);
let item = generator.next();
while (!item.done) {
    console.log(item.value);
    item = generator.next();
}

結果は以下です。

item1
item2
item3



以上です。