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