함수 작성 시, 함수를 특정 구간에 멈춰 놓을 수도 있고, 원할 때 다시 돌아가게 할 수도 있음.
function* generatorFunction(){
console.log("안녕하세요");
yield 1
console.log('제너레이터 함수')
yield 2
console.log('function*')
yield 3
return 4
}
const generator = generatorFunction()
generator.next()
// '안녕하세요'
// { value: 1, done: false }
generator.next()
// '제너레이터 함수'
// { value: 2, done: false }
generator.next()
// 'function*'
// { value: 3, done: false }
generator.next()
// { value: 4, done: true }
generator.next()
// { value: undefined, done: true }
제너레이터
처음 만들어지면
함수 흐름 : 멈춰 있는 상태
next()
호출 시
다음 yield
있는 곳까지 호출 & 다시 함수 멈춤
function*
사용const generator = generatorFunction()
'제너레이터' 란?
제너레이터 함수 호출 시, 반환되는 객체
next함수
에 파라미터 넣으면 제너레이터 함수에서 해당 값 조회 가능(yield
를 사용) function* sumGenerator(){
console.log('sumGenerator가 만들어졌습니다.');
let a = yield;
let b = yield;
yield a+b;
}
const sum = sumGenerator();
sum.next();
// 'sumGenerator가 만들어졌습니다.'
// { value: undefined, done: false }
sum.next(1);
// { value: undefined, done: false }
sum.next(2);
// { value: 3, done: false }
sum.next();
// { value: undefined, done: true }
redux-saga는 제너레이터(generator) 함수 문법을 기반으로 비동기 작업을 관리해줌.
== 디스패치하는 액션을 모니터링해서 그에 따라 필요한 작업을 따로 수행 가능한 미들웨어
예시
function* watchGenerator() {
console.log('모니터링 중...');
let prevAction = null;
while (true) {
const action = yield;
console.log('이전 액션: ', prevAction)
prevAction = action;
if(action.type === 'HELLO'){
console.log('안녕하세요!')
}
}
}
const watch = watchGenerator()
watch.next()
// '모니터링 중...'
// { value: undefined, done: false }
watch.next({type: 'TEST'})
// '이전 액션: ' null
// { value: undefined, done: false }
watch.next({type: 'HELLO'})
// '이전 액션: ' { type: 'TEST' }
// '안녕하세요!'
// { value: undefined, done: false }