我怎样才能让 redux-saga 以任何顺序等待两个动作至少发生一次?
How can I get redux-saga to wait for two actions to happen at least once in any order?
这里是 Redux 传奇新手。
我需要创建一个传奇,从我的 API 服务器加载 redux 存储的初始状态。
这涉及使用两个异步传奇:getCurrentUser
和 getGroups
。
我需要并行发出这些 ajax 请求并等待 GET_CURRENT_USER_SUCCESS
和 GET_GROUPS_SUCCESS
动作,然后再发出 pageReady
动作告诉 UI 是时候渲染反应组件了。
我想到了一个 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 saga 等待 GET_GROUPS_SUCCESS
和 GET_CURRENT_USER_SUCCESS
发生 至少一次以任何顺序?
我想你想要 all
effect
function * loadInitialState () {
// start loading state...
yield all([
take(actions.GET_GROUPS_SUCCESS)
take(actions.GET_CURRENT_USER_SUCCESS)
]);
yield put(actions.pageReady())
}
这里是 Redux 传奇新手。
我需要创建一个传奇,从我的 API 服务器加载 redux 存储的初始状态。
这涉及使用两个异步传奇:getCurrentUser
和 getGroups
。
我需要并行发出这些 ajax 请求并等待 GET_CURRENT_USER_SUCCESS
和 GET_GROUPS_SUCCESS
动作,然后再发出 pageReady
动作告诉 UI 是时候渲染反应组件了。
我想到了一个 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 saga 等待 GET_GROUPS_SUCCESS
和 GET_CURRENT_USER_SUCCESS
发生 至少一次以任何顺序?
我想你想要 all
effect
function * loadInitialState () {
// start loading state...
yield all([
take(actions.GET_GROUPS_SUCCESS)
take(actions.GET_CURRENT_USER_SUCCESS)
]);
yield put(actions.pageReady())
}