제너레이터 함수는 일반 함수와 같이 함수의 코드 블록을 한 번에 실행하지 않고 함수 코드 블록의 실행을 일시 중지했다가 필요한 시점에 재시작할 수 있는 특수한 함수이다. 비동기 처리에 유용하게 사용된다.
제너레이터는 이터러블 이면서 동시에 이터레이터인 객체이다.
제너레이터 함수는 function* 로 선언하며, 하나 이상의 yield 를 가진다.
제너레이터는 next 메서드를 소유한다. next 메서드를 호출하면, yield를 사용한 지점까지 함수를 실행하고 멈췄다가, 그 다음 호출 시 다음 yield 지점까지 실행한다. (yield는 break point와 같다.)
일반 함수를 호출하면 return문을 반환하지만,
제너레이터 함수를 호출하면 제너레이터를 반환한다.
.next() 호출 시 첫번째 yeild 까지 실행되며,
value와 done 프로퍼티를 갖는 이터레이터 리절트 객체를 반환한다.
yield 2.5;
로 설정했을 경우, value값에 2.5를 반환한다.
함수가 모두 실행되고 나면 done:true를 반환한다.
while 반복문을 사용하여 무한 반복문을 만들었다.
제너레이터함수가 아닌 경우 무한반복되므로 오류가발생한다.
next 메서드를 사용하여 호출할 때마다,
i가 1씩 증가하는 것을 볼 수 있다.
제너레이터 함수를 사용하면 비동기 작업을 동기작업처럼 구현할 수 있다. 즉 비동기 처리 함수가 처리 결과를 반환하도록 구현할 수 있다.
이런 방면에서 yield는 async의 await과도 유사하다.
참고
- https://poiemaweb.com/es6-generator
-https://react.vlpt.us/redux-middleware/10-redux-saga.html
JavaScript :: 정규식으로 해시태그(#) 분류하기(Regexp for hashtags) (0) | 2020.12.12 |
---|---|
JavaScript :: 웹에 사진올리고 썸네일이미지 보이게(web APIs) (0) | 2020.11.26 |
Array.indexOf() (0) | 2020.11.12 |
js로 리스트 작성하기 (0) | 2020.10.15 |
JavaScript :: Promise API (all, race, allSettled) (0) | 2020.10.14 |
댓글 영역