반복자를 사용할 수 있는 객체, 혹은 그 객체를 사용할 수 있는 함수이다.
우리가 보통 사용하는 함수는 로직을 실행한 후 return을 통해 반환한 후, 재호출이 발생하기 전까지는 완전히 종료된다.
그러나 generator는 종료의 개념이 아닌, 보류의 개념이다.
yield를 통한 반환
generator는 loop 환경 내에서 자신의 로직을 종료하지 않고, 기억한 상태로 보류한다.
즉 loop 내 yield(=자신의 logic을 종료하지않고 지속하며, loop를 지속하는 상황에서 반환값을 누적 및 지속 실행하며 전달)를 통해 자신의 logic을 종료하지않고 지속한다.
next를 통해 yield 호출
generator 내의 yield 반환을 지속하기 위해선 next를 통해 yield를 호출하면된다.
이때 generator 내 logic을 종료않고 누적하기위해선 loop 내에서 yield logic을 작성해야 한다.
function* gen() {
let cnt = 0;
while (true) {
yield (cnt = cnt + 1);
}
}
const g = gen();
console.log(g.next());
console.log(g.next());
console.log(g.next());
generator의 logic을 실행한 후 yield를 특정 시점에 호출하여 비동기적인 처리를 할 수 있다.
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Operators/yield
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Generator