• 카테고리

    질문 & 답변
  • 세부 분야

    풀스택

  • 해결 여부

    미해결

제너레이터의 task에 대해 질문있습니다.

21.05.03 22:16 작성 조회수 150

0

강의를 들으면서 

take 는 단 한번 next()를 할 수 있는 함수로 이해했는데,

yield take(action, generator func)의 구문을 사용하면

지정한 action이 발생했을 때 

한번은 사용되어야하는 것 아닌가요?..

take(addcomment_request, addcomment)의 경우

addcomment_request 액션이 발생한 콘솔은 찍히는데,

addcomment 제너레이터함수가 실행되지 않아서 이해가 잘 안됩니다! ㅠㅠ

takeLatest 로 변경해서 사용하니 문제가 해결되긴했는데

궁금해서 질문드렸습니다. 

답변 2

·

답변을 작성해보세요.

0

김준호님의 프로필

김준호

질문자

2021.05.04

post / comment 부분입니다!

ADD_COMMENT_REQUEST 액션에 맞게 dispatch 되는 것은 확인하였는데,

addComment 제너레이터함수가 실행이 되지 않습니다. 

takeLatest를 사용하면 문제없이 잘되요!!

function* addComment(action){
    try{
        // const result = yield call(addCommentAPI, action.data);
        yield delay(1000);
        yield put({
            type:ADD_COMMENT_SUCCESS,
            data:action.data,
        })
    }
    catch(err){
        yield put({
            type:ADD_COMMENT_FAILURE,
            data:err.response.data,
        })
    }
}

function* watchAddComment(){
    yield take(ADD_COMMENT_REQUESTaddComment);
}

export default function* post(){
    yield all([
        fork(watchAddComment),
        fork(watchAddPost),
    ])
}

아, take의 경우는

yield take(액션);

함수();

이런식으로 두줄에 걸쳐 적어주세요.

0

한 번은 호출되는 게 맞습니다. 혹시 관련 코드 올려주시겠어요?