제너레이터는 멈출 수 있는 생산자와 당겨오는 소비자를 분리한다

function*와 async function*는 값을 한꺼번에 만들지 않고 next 또는 for await가 요청할 때 다음 지점까지 실행한다.

생산자yield 지점에서 멈춤

지역 변수와 실행 위치가 보존된다.

소비자next 또는 for...of

다음 값을 언제 받을지 결정한다.

타입Yield, Return, Next 분리

전달 값과 최종 결과를 섞지 않는다.

구분의미판단
일반 제너레이터동기 순차 값무한 ID, 페이지 커서, custom iterable
비동기 제너레이터늦게 도착하는 값네트워크, 파일, 이벤트 스트림
async/await최종 결과 하나중간 값을 노출하지 않아도 되는 작업

핵심 제너레이터 선택은 문법보다 값이 연속으로 필요하고 소비자가 진행 속도를 정해야 하는지에서 갈린다.