2017-12-18 32 views
0

응용 프로그램 시작시 서버에서로드 된 초기 데이터가 있습니다.사가 (Saga)와 함께 일부 작업을 해고 한 후에 모든 작업을 수행하는 방법을 알려주십시오.

로드 후 InitialDataLoaded과 같은 동작이 실행됩니다.

이 데이터는 상태로 저장되며 향후 서버와의 모든 통신에 사용됩니다.

앱에서 데이터를로드하는 동안 takeEvery(action) 님이 다른 요청을 보낼 수 있습니다. 초기 데이터를 사용할 수없는 경우 초기 데이터가 없으면 이해할 수 없으므로 이러한 요청을 보낼 수 없습니다.

필요한 조치가 실행될 때만 모든 종속 작업으로 인해 요청이 발생하도록하려면 어떻게해야합니까?

답변

1

takeEvery로 보낼 수있는 다른 요청이 UI에 의해 시작되는지는 확실하지 않습니다.이 경우 UI가 초기 데이터가로드되었는지 확인하여 UI를 비활성화해야합니다.

그러나 당신이 사가에서 얘기하는 경우,이 같은 InitialDataLoaded 행동을 기다릴 수 :

function* watchAppInit() { 
    while (true) { 
    // when this completes it dispatches the InitialDataLoaded action 
    yield fork(loadInitialData); 

    yield take(actionTypes.InitialDataLoaded); 

    // this won't execute until InitialDataLoaded action is dispatched 
    yield fork(doOtherStuff); 
    } 
} 

하거나 다른 작업 상태를 확인할 수 있습니다

function* watchDoOtherStuff() { 
    while (true) { 
    const action = yield take(actionTypes.DO_OTHER_STUFF); 

    // check the state to see if you have initial data 
    const initialized = yield select(selectors.getInitialDataLoaded); 

    if (initialized) { 
     yield fork(doIt); 
    } 
    } 
} 
+0

첫 번째에게 이상적인 솔루션 – Cleiton