2017-11-28 8 views
0

나는 무용담에서 다른 무용담을 부르고 싶다.redux-saga에서 yield * vs yield는 언제 사용해야합니까?

물론 무용담은 발전기 기능이며 비동기식입니다.

사용자 yield *을 사용해야합니까, 아니면 항상 yield을 사용해야합니까?

function* mySaga({ payload: { id, name } }) { 
    yield myOtherAsyncSaga(); // when to use yield *? 
} 
+0

글쎄,'mySaga()'생성기는 다른 생성기에서 하나의 결과 만 반환하고 완료됩니다. 'yield *'의 요점은 효과적으로 다른 생성자에게 위임하는 것이며, 완료 될 때까지 * 모든 결과를 계속 반환하는 것입니다. 위임 생성자는 그 전후에 자체 값을 생성 할 수 있습니다. – Pointy

+0

그래서 생성기가 단일 결과 만 반환하는 경우'yield'는 behaviourally'yield *'와 같습니다? – Ben

+1

그건 내 이해, 그래; 몇 가지 사소한 테스트 기능으로 실험적으로 검증하는 것은 꽤 쉽습니다. – Pointy

답변

1

모험은 물론 발전기 함수이며, 비동기식이다.
사용자 수율 * 또는 항상 수율을 사용해야합니까?

처음에는 사가, 미들웨어, 프로세스 관리자 및 생성기 기능이 일반적으로 작동하는 것처럼 이해해야합니다. 사실 redux-saga은 두 가지 측면을 구현합니다 : redux 저장소 용 미들웨어 (사용자 지정 작업을 가로 채고 삽입 함)와 async process manager은 자신의 틱 콜백 도메인을 가지고 있으며 비동기 작업 수행에 도움이됩니다.

다음으로 모든 클라이언트 구현 사가 기능은 단지 effect creator입니다. 실제로 클라이언트 사가 기능은 실제로 구현되지 않는 방식으로 구현되지만 효과 생성 - call, take, put 등입니다. 또한 사가는 본질적으로 동기화 또는 비동기가 아니며 일부 동작을 사가 프로세스 관리자에게 위임합니다 , 요청 된 조치 (예 : 약속 대기 중)를 수행합니다.
물론 클라이언트 사가에서 수동으로 약속/비동기 처리를 수행 할 수 있지만 이러한 작업은 사가 이벤트주기에서 제외됩니다. 같은 무용담 프로세스 - while(true)의 경우 -

그래서, redux-saga 내부는 적절한 효과를 반환하고 어쩌면 폐쇄 활성화 맥락에서 일부 정보를 저장 an iterator,로 클라이언트 사가 원한다. 따라서, redux-saga에는 사용 사례가 없습니다. 여기서 yield *은 필수이며, 사인 yield *은 후속 반복기를 상위 레벨로 다시 위임 한 것입니다.