less than 1 minute read

  • 제네레이터는 제네레이터 함수 function* f(...) {...} 사용해 만듬

  • 제네레이터 함수 호출 시 코드가 실행되는 것이 아니라 실행을 처리하는 ‘제네레이터 객체’ 반환됨

  • next() 호출 시 가장 가까운 yield 문 만날떄 까지 실행 지속 (value 생략 시 undefined됨)

  • yield 문 만나면 실행 멈추고 value 가 바깥 코드에 반환

  • next() 는 산출 값 가진 value 와 함수 코드 실행/종료 에 따른 값 가진 done 프로퍼티 가진 객체 반환

  • 제네레이터 종료된 상태에선 next() 호출해도 객체 {done : true} 만 반환

  • 제네레이터는 이터러블(next() 존재) 이므로 for..of 반복문, 전개문법 사용 가능

  • 이터러블 구현 대신 제네레이터 함수로 반복 가능(.next() 메서드 존재, 반환값 형태 만족)

  • yield* 사용하여 제너레이터를 다른 제네레이터에 ‘끼워 넣기’ 가능

  • yield 는 양방향 길과 같은 역할

  • generator.next(arg) 호출 시 인수 arg는 이전 yield의 결과가 되며 다음 yield 다다름

  • generate.next 처음 호출 시엔 항상 인수 없어야 함(인수 넘어오더라도 무시되어야 함)

  • generator.throw 로 에러 yield 안으로 전달 가능하며 제네레이터 안에서 에러처리 안 하면 에러는 제너레이터 호출 코드(외부코드) 로 ‘떨어져 나옴’