Generator は、終了して後で再入力することができる関数です。 JavaScript におけるジェネレータ (特に Promises と組み合わせた場合) は、コールバック地獄や Inversion of Control といったコールバックの問題を完全に排除できないまでも緩和するため、非同期プログラミングの非常に強力なツールになります。 しかし、これらの問題に対するさらに簡単な解決策は、非同期関数で達成できます。

ジェネレーター関数を呼び出すと、その本体がすぐに実行されるわけではなく、代わりにその関数のイテレーター オブジェクトが返されます。 イテレータの next() メソッドが呼び出されると、イテレータから返す値を指定する最初の yield 式まで、または yield* で別のジェネレータ関数に委ねるまで、ジェネレータ関数の本体が実行される。 next()メソッドは、返された値を含むvalueプロパティと、ジェネレータが最後の値を返したかどうかを示すdoneプロパティを持つオブジェクトをブール値で返す。 引数を指定してnext()メソッドを呼び出すと、ジェネレータ関数の実行が再開され、実行が一時停止されたyield式がnext()からの引数で置き換えられます。

ジェネレータ内のreturnステートメントを実行すると、ジェネレータは終了します(つまり、それによって返されるオブジェクトのdoneプロパティはtrueに設定されます)。
ジェネレータが終了すると、その後の next() コールはそのジェネレータのコードを一切実行せず、単にこの形式のオブジェクトを返します。 {value: undefined, done: true}.

コメントを残す

メールアドレスが公開されることはありません。