ジェネレータについて


yieldはreturnキーワードのように値を返します.yieldはfunction*キーワードを使用する関数によって呼び出される必要があります.
ex generator
export function* generator(){
    console.log("genderator started...")
    let value = 1
    while(value < 4)
        yield value++
    console.log("generator finished...")
}
generator-test
import {generator} from "./06/generator"
for(let value of generator())
    console.log(value)
setInterval関数とジェネレータの類似性
ジェネレータの動作は、単一スレッドで動作するプログラミング言語をマルチスレッドで動作させるように見えます.
const intervalID = setInterval(콜백함수, 호출주기)
setInterval関数は無限に繰り返すことができますが、clearInterval関数を使用して停止できます.
clearInterval(intervalID)
setInterval.ts
const period = 1000
let count = 0
console.log('program started...')
const id = setInterval(() => {
    if(count >= 12){
        clearInterval(id)
        console.log("program finished...")
    }
    else{
        console.log(++count)
    }
}, period)
function*キーワード
function*キーワード宣言関数
関数体内には降伏門がある.
ジェネレータはfunction*キーワードとしてのみ宣言できるため、矢印関数を使用してジェネレータを作成することはできません.ジェネレータは、反復器を提供する反復器プロバイダとして動作します.
yieldキーワード
反復の自動生成
反復器プロバイダロールも実行されます.
function*キーワードを使用してジェネレータ形式で関数を作成します.
export function* rangeGenerator(from: number, to: number){
	let value = from
    while(value < to){
    	yield value++
    }
}
yieldキーワード
降伏は値のみ、降伏*は他のジェネレータまたは配列に対してのみ適用されます.
function* gen12() {
    yield 1
    yield 2
}

export function* gen12345(){
    yield* gen12()
    yield* [3, 4]
    yield 5
}
console.log(gen12345)
index.ts
import { gen12345 } from "./06/yield-star";

for(let value of gen12345())
  console.log(value)
収益率戻り値
降伏演算子は値を返します.
export function* gen(){
    let count = 5
    let select = 0;
    while(count--){
        select = yield 
            `you select ${select}`
    }
}
index.ts