ジェネレーター (generator)
Generatorを使用した関数はアロー関数での表記ではなく、必ずfunction*() {}
と書く必要があります。次は可能なGeneratorの記述方法です。
ts
function*generatorFunction1 () {// ...}constgeneratorFunction2 = function* () {// ...};classGeneratorSample {public *generatorFunction3 () {// ...}}
ts
function*generatorFunction1 () {// ...}constgeneratorFunction2 = function* () {// ...};classGeneratorSample {public *generatorFunction3 () {// ...}}
Generatorは反復可能(Iterable<T>
)な反復子(Iterator<T>
)であるインターフェースIterableIterator<T>
を実装したクラスのオブジェクトのことです。条件を満たしたクラスはGenerator関数の中でyield
キーワードを使えます。yield
は呼ばれたときに一度その値を呼び出し元へ返却し、次に呼ばれたときはその続きから処理を開始します。
Promise
が一般化する以前、非同期処理を代わりに担当する目的でGeneratorが使われていたことはありますが、前述のPromise
に加えてasync / await
が一般的に使われるようになってから非同期処理の目的でGeneratorを使う機会は減りました。現在でも大量のデータを取得したいときに一度ではなく、小出しに取得したいときにGeneratorは使い道があります。