我怎样才能让redux-saga等待两个动作以任何顺序至少发生一次?

mom*_*omo 9 javascript redux-saga

Redux saga noob在这里.

我需要创建一个saga,从我的API服务器加载redux存储的初始状态.

这涉及使用两个异步传奇:getCurrentUsergetGroups.

我需要并行发出这些ajax请求,并在发出动作之前等待GET_CURRENT_USER_SUCCESS和动作,告诉UI是时候渲染反应组件.GET_GROUPS_SUCCESSpageReady

我提出了一个hacky解决方案:

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())
  }
}
Run Code Online (Sandbox Code Playgroud)

此代码的问题在于,如果由于某种原因GET_GROUPS_SUCCESS发出两次,pageReady则会提前调用该操作.

我怎样才能让redux saga等待GET_GROUPS_SUCCESSGET_CURRENT_USER_SUCCESS任何顺序至少发生一次

eri*_*old 15

我想你想要的all效果

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

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

  yield put(actions.pageReady())
}
Run Code Online (Sandbox Code Playgroud)

  • @haxpanel使用竞赛效果而不是全部 (7认同)
  • 发表另一个问题。 (2认同)