• 카테고리

    질문 & 답변
  • 세부 분야

    풀스택

  • 해결 여부

    해결됨

put 앞에 yield 쓰는것 질문

20.04.26 20:54 작성 조회수 119

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

네네 put 앞에 yield같은 건 테스트 용도가 더 큽니다.

0

stefan CHO님의 프로필

stefan CHO

질문자

2020.04.26

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넣는다는게 이 코드를 말씀하시는게 맞죠?

빠른 답변감사해요