일반적으로 자바스크립트 함수는 실행하면
함수 내부의 로직들이 순차적으로 작동하게 된다.
제너레이터 함수는 기본 함수에서 일시정지 같은 기능을 탑재하고 있다.
function* generator(i) {
yield i;
yield i + 10;
}
const gen = generator(10);
console.log(gen.next());
// expected output: 10
console.log(gen.next());
// expected output: 20
gen 이라는 상수는 generator 함수에 10이라는 인자 값을 전달해서 함수를 실행한다.
일반적인 함수의 관점에서 내부가 10 과 20이 된다는 것을 유추 할 수가 있다.
그렇지만 내부에서 한번에 10과 20이 나오지 않는다.
gen.next()를 한번 실행하면 다음 yield까지 로직이 실행된다. 그래서 콘솔에 10이 나온다.
그 다음 로직의 결과를 보고 싶다면 gen.next()를 한번 더 실행하면 20이 된다.
결과적으로 yield가 로직의 시작과 종료점이 된다. 그리고 일시정지 같은 기능을 제공하게 된다.
이 같은 제너레이터 함수의 특성을 이용한 대표적인 라이브러리가 있는데
Redux middleware library인 redux-saga 가 있다.
'JS' 카테고리의 다른 글
리스트 드래그 앤 드랍 구현 (자바스크립트, 엘리먼트로 제어) (0) | 2023.04.29 |
---|---|
드래그 이벤트 - 자바스크립트 (0) | 2023.04.29 |
default parameter (매개변수 기본값) (0) | 2020.07.21 |
ES6 - template literal (0) | 2020.07.21 |
ES6 - Block scope (0) | 2020.06.21 |