제네레이터
-
제네레이터는 제네레이터 함수
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 안으로 전달 가능하며 제네레이터 안에서 에러처리 안 하면 에러는 제너레이터 호출 코드(외부코드) 로 ‘떨어져 나옴’