我有一个类似的监视器
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
。