인프런 커뮤니티 질문&답변

김준호님의 프로필 이미지

작성한 질문수

[리뉴얼] React로 NodeBird SNS 만들기

바뀐 상태 적용하고 eslint 점검하기

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

작성

·

185

0

강의를 들으면서 

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

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

지정한 action이 발생했을 때 

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

take(addcomment_request, addcomment)의 경우

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

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

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

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

답변 2

0

김준호님의 프로필 이미지
김준호
질문자

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

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

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