728x90
redux-saga 에서는 ES6의 제너레이터 함수 문법을 사용한다.
사실 이 문법에 대해 딱히 몰라도 redux-saga를 사용법만 알면 큰 문제가 되지 않지만
원리를 알면 아주 조금은 도움이 된다.
제너레이터 함수는 문자그대로 발전기를 만들어주는 것으로
해당 함수를 최초 호출할 경우 함수 내부 구문이 실행되는 것이 아니라
내부 구문을 실행시킬 수 있는 제너레이터 객체를 리턴하게 된다.
이 문법의 핵심기능은 함수를 실행할 때
함수를 특정구간에 멈춰 놓았다가 다음 호출에 이어서 실행시킬 수 있다는 것이다.
제너레이터 함수는 아래와 같이 정의한다.
function* generatorFunc(){
console.log('1 구간 진입');
let param = yield;
console.log('1구간에서 입력된 값: ' + param);
console.log('2 구간 진입');
param = yield;
console.log('2구간에서 입력된 값: ' + param);
console.log('3 구간 진입');
param = yield;
console.log('3구간에서 입력된 값: ' + param);
console.log('제너레이터 종료');
yield '끝';
}
사용은 아래와 같이 한다.
const test = generatorFunc();
test.next(111);
// 1 구간 진입
// {value: undefined, done: false}
test.next(222);
// 1구간에서 입력된 값: 222
// 2 구간 진입
// {value: undefined, done: false}
test.next(333);
// 2구간에서 입력된 값: 333
// 3 구간 진입
// {value: undefined, done: false}
test.next(444);
// 3구간에서 입력된 값: 444
// 제너레이터 종료
// {value: "끝", done: false}
test.next(555);
//{value: undefined, done: true}
보면 알겠지만 제너레이터 함수를 정의할때는 function* 를 사용하며
제너레이터 객체 생성후 next 를 호출할 경우 yield가 선언된 행에서
순차적으로 흐름을 멈춘다.
제너레이터 함수 안에서는 yield로 next 함수의 인자를 받아올 수 있고
next 함수는 아래와 같은 포맷의 객체리터럴을 고정적으로 리턴한다.
{value: undefined, done: false}
이 때 value 값은 제너레이터 함수에서 yield '111'; 구분으로 지정된 값이며
done는 제너레이터 함수의 종료 여부를 의미한다.
728x90
'Frontend > JavaScript' 카테고리의 다른 글
script 태그 async, defer 옵션 (0) | 2021.03.04 |
---|---|
콜백함수와 비동기처리 (0) | 2021.03.04 |
ES6 import, export (0) | 2021.03.03 |
ES6 화살표 함수 (0) | 2021.03.03 |
ES6 전개연산자 (0) | 2021.03.03 |