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)
생성기가 동작하는 방식은 단일스레드로 동작하는 프로그래밍 언어가 마치 다중스레드로 동작하는 것처럼 보이게 하는 기능을 합니다.
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* 키워드로 함수를 선언한다
함수 몸통 안에 yield문이 있다.
생성기는 오직 function* 키워드로 선언해야 하므로 화살표 함수로는 생성기를 만들 수 없습니다. 생성기는 반복기를 제공하는 반복기 제공자로서 동작합니다.
반복기를 자동으로 만들어 준다
반복기 제공자 역할도 수행한다.
이제 function* 키워드를 이용해 생성기 형태로 함수를 만들기
export function* rangeGenerator(from: number, to: number){
let value = from
while(value < to){
yield value++
}
}
yield는 단순히 값을 대상으로 동작하지만, 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)
yield연산자는 값을 반환합니다.
export function* gen(){
let count = 5
let select = 0;
while(count--){
select = yield
`you select ${select}`
}
}
index.ts