해결된 질문
작성
·
170
0
좀 바보같은 질문일수도 있는데..
loop안에 take, delay , put앞에 모두 yield를 써야하는 이유가 뭘까요
예를 들면
function* generator(){
yield console.log(1);
yield console.log(2);
yield console.log(3);
yield console.log(4);
}
여기서 제가 1~4까지 출력을 하고 싶다면 next를 네번해야하는건데
function* generator(){
yield console.log(1); // take처럼 대기하는 시점이 여기라치면
console.log(2);
console.log(3);
yield console.log(4);
}
이렇게 하면 next 두번에 1~4까지 다 출력되는 거 잖아요.
만약 take, put 과 같은게 루프 한번에 들어가있으면, 루프 한바퀴의 첫부분과 마지막 부분인 take와 put에만 yield를 써주면 문제되는 상황이 있나요? delay 앞에도 써주는 이유가 뭔지 궁금합니다.
답변 3
1
네네 원래 generator에서는 중단점/대기점에서 yield하는 게 맞습니다. 그런데 사가의 yield에는 두 가지 이득이 더 있습니다.
일단 call같이 비동기 요청 후 값을 받아오는 것에서 비동기 요청이 완료된 후에 yield 값이 나옵니다.(await 문법과 비슷합니다)
put과 같이 비동기일 필요가 없는 함수도 앞에 yield를 붙이면 함수를 테스트할 때 편리합니다. generator에서 각 단계별로 잘 실행되는지 테스트할 때 next를 호출할때마다 한 단계씩 실행되기 때문에 테스트하기 용이합니다.
0
0
function* authorize(user, password) {
try {
const token = yield call(Api.authorize, user, password)
yield put({type: 'LOGIN_SUCCESS', token})
return token
} catch(error) {
yield put({type: 'LOGIN_ERROR', error})
}
}
redux saga 공식 문서 예제 인데
call 으로 데이터 갖고 온다음에 다음put이 실행되게 yield넣는다는게 이 코드를 말씀하시는게 맞죠?
빠른 답변감사해요