web-dev-qa-db-ja.com

redux-sagaに2つのアクションが少なくとも1回、任意の順序で発生するのを待つにはどうすればよいですか?

Redux saganoobはこちら。

APIサーバーからreduxストアの初期状態をロードするsagaを作成する必要があります。

これには、getCurrentUsergetGroupsの2つの非同期サガの使用が含まれます。

これらのajaxリクエストを並行して発行し、GET_CURRENT_USER_SUCCESSアクションとGET_GROUPS_SUCCESSアクションを待ってから、UIに反応コンポーネントをレンダリングするタイミングを通知する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_SUCCESSが2回発行された場合、pageReadyアクションが早期に呼び出されることです。

ReduxsagaにGET_GROUPS_SUCCESSGET_CURRENT_USER_SUCCESSが発生するのを待つにはどうすればよいですか少なくとも1回は任意の順序で

11
momo

all効果 が欲しいと思います

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

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

  yield put(actions.pageReady())
}
14
erikvold