제너레이터는 멈출 수 있는 생산자와 당겨오는 소비자를 분리한다
function*와 async function*는 값을 한꺼번에 만들지 않고 next 또는 for await가 요청할 때 다음 지점까지 실행한다.
지역 변수와 실행 위치가 보존된다.
다음 값을 언제 받을지 결정한다.
전달 값과 최종 결과를 섞지 않는다.
| 구분 | 의미 | 판단 |
|---|---|---|
| 일반 제너레이터 | 동기 순차 값 | 무한 ID, 페이지 커서, custom iterable |
| 비동기 제너레이터 | 늦게 도착하는 값 | 네트워크, 파일, 이벤트 스트림 |
| async/await | 최종 결과 하나 | 중간 값을 노출하지 않아도 되는 작업 |
핵심 제너레이터 선택은 문법보다 값이 연속으로 필요하고 소비자가 진행 속도를 정해야 하는지에서 갈린다.