GENERATOR

제너레이터는 함수를 한 번에 끝내지 않고 yield 지점마다 멈췄다 재개한다

function* 호출은 함수 실행이 아니라 제너레이터 객체 생성이며, next()가 실행 흐름을 앞으로 보낸다.

생성

함수를 호출해도 본문은 아직 실행되지 않고 이터레이터 객체가 반환된다.

function*
일시 중지

yield 값을 호출자에게 넘기고 함수 내부 상태를 그대로 보존한다.

yield
재개

next(value)가 이전 yield 표현식의 결과가 되어 다음 지점까지 실행한다.

next()
종료

return에 도달하면 done이 true가 되고 이후 next는 더 진행하지 않는다.

done:true
타입 기준: Generator<YieldType, ReturnType, NextType>은 yield 값, 최종 반환값, next 입력값을 분리해서 표현한다.