Redux saga noob在这里。
我需要创建一个saga,从我的API服务器加载redux存储的初始状态。
这涉及使用两个异步传奇:getCurrentUser
和getGroups
。
我需要并行发出这些ajax请求并等待GET_CURRENT_USER_SUCCESS
和GET_GROUPS_SUCCESS
操作,然后发出pageReady
操作,告诉用户界面是时候渲染反应成分。
我想出了一个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())
}
}
此代码存在的问题是,如果出于某种原因GET_GROUPS_SUCCESS
发出两次,pageReady
操作将会提前调用。
如何让redux传奇等待GET_GROUPS_SUCCESS
和GET_CURRENT_USER_SUCCESS
以任意顺序至少发生一次?
答案 0 :(得分:10)
我想你想要all
effect
function * loadInitialState () {
// start loading state...
yield all([
take(actions.GET_GROUPS_SUCCESS)
take(actions.GET_CURRENT_USER_SUCCESS)
]);
yield put(actions.pageReady())
}