2017-06-07 2 views
2

ここにRedux saga noobがあります。redux-sagaに2つのアクションが少なくとも1回何らかの順序で発生するのを待つにはどうしたらよいですか?

私のAPIサーバーからreduxストアの初期状態を読み込むサガを作成する必要があります。

これには、2つの非同期サガを使用します(getCurrentUserおよびgetGroups)。

私は並行してこれらのAJAX要求を発行し、それが反応するコンポーネントをレンダリングする時が来たUIを伝えるpageReadyアクションを発行する前にGET_CURRENT_USER_SUCCESSGET_GROUPS_SUCCESSアクションを待つ必要があります。

私はハック解決策を考え出した:このコードの問題は、何らかの理由GET_GROUPS_SUCCESSのために二回発行されている場合、pageReadyアクションは早期に呼び出されるということです

function * loadInitialState() { 
    yield fork(getCurrentUser) 
    yield fork(getGroups) 

    while (true) { 
    yield take([ 
     actions.GET_GROUPS_SUCCESS, 
     actions.GET_CURRENT_USER_SUCCESS 
    ]) 
    yield take([ 
     actions.GET_GROUPS_SUCCESS, 
     actions.GET_CURRENT_USER_SUCCESS 
    ]) 
    yield put(actions.pageReady()) 
    } 
} 

はどのようにして、任意の順序に少なくとも一度を発生するGET_GROUPS_SUCCESSGET_CURRENT_USER_SUCCESSを待つためにReduxの武勇伝を得ることができますか?

答えて

2

は、私はあなたがall effect

function * loadInitialState() { 
    // start loading state... 

    yield all([ 
    take(actions.GET_GROUPS_SUCCESS) 
    take(actions.GET_CURRENT_USER_SUCCESS) 
    ]); 

    yield put(actions.pageReady()) 
} 
をしたいと思います
関連する問題