Redux-Saga takeEvery 用于多个动作和一个任务
Redux-Saga takeEvery for multiple actions and one task
我有一个类似的watcher
export default function* watch() {
yield takeEvery(getProducts, fetchData)
yield takeEvery(getUser, fetchData)
}
但是在这种形式下,它不起作用,因为fetchData必须运行一次并且仅当getProducts和getUser都成功时
是否有可能以某种方式将两个动作都转移到takeEvery,或者是否有一个takeEvery的类似物,它可以接受两个或多个动作并仅在所有转移的动作成功执行后才执行fetchData函数?
您可以将 all
与 take
结合使用,以等待两个操作而不考虑顺序。
export default function* watch() {
yield all([
take(getProducts),
take(getUser)
])
yield call(fetchData)
}
如果你想在获取完成后再次等待这两个动作,你可以将它包装成一个无限的 while 循环:
export default function* watch() {
while (true) {
yield all([
take(getProducts),
take(getUser)
])
yield call(fetchData)
}
}
如果您不想等待抓取完成后再等待另一对操作,您也可以将 call
效果替换为 fork
。
我有一个类似的watcher
export default function* watch() {
yield takeEvery(getProducts, fetchData)
yield takeEvery(getUser, fetchData)
}
但是在这种形式下,它不起作用,因为fetchData必须运行一次并且仅当getProducts和getUser都成功时
是否有可能以某种方式将两个动作都转移到takeEvery,或者是否有一个takeEvery的类似物,它可以接受两个或多个动作并仅在所有转移的动作成功执行后才执行fetchData函数?
您可以将 all
与 take
结合使用,以等待两个操作而不考虑顺序。
export default function* watch() {
yield all([
take(getProducts),
take(getUser)
])
yield call(fetchData)
}
如果你想在获取完成后再次等待这两个动作,你可以将它包装成一个无限的 while 循环:
export default function* watch() {
while (true) {
yield all([
take(getProducts),
take(getUser)
])
yield call(fetchData)
}
}
如果您不想等待抓取完成后再等待另一对操作,您也可以将 call
效果替换为 fork
。