【问题标题】:Redux-Saga takeEvery for multiple actions and one taskRedux-Saga takeEvery 用于多个操作和一个任务
【发布时间】:2021-08-19 17:05:37
【问题描述】:

我有一个类似的观察者

export default function* watch() {
    yield takeEvery(getProducts, fetchData)
    yield takeEvery(getUser, fetchData)
}

但在这种形式下,它不起作用,因为 fetchData 必须运行一次,并且只有在 getProducts 和 getUser 都成功时才运行

是否有可能以某种方式将两个动作都转移到 takeEvery,或者是否有一个类似于 takeEvery,它可以接受两个或多个动作,并且只有在成功执行所有转移的动作后才执行 fetchData 函数?

【问题讨论】:

  • getProductsgetUser return a pattern
  • @Alex 是的,它们是返回模式

标签: javascript reactjs redux react-redux redux-saga


【解决方案1】:

您可以将alltake 结合使用,以等待两个操作,无论顺序如何。

export default function* watch() {
    yield all([
        take(getProducts),
        take(getUser)
    ])
    yield call(fetchData)
}

如果您想在获取完成后再次等待这两个操作,您可以将其包装为无限循环:

export default function* watch() {
    while (true) {
        yield all([
            take(getProducts),
            take(getUser)
        ])
        yield call(fetchData) 
    }
}

如果您不想在等待另一对操作之前等待提取完成,也可以将call 效果替换为fork

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-23
    • 1970-01-01
    • 2022-01-26
    • 1970-01-01
    相关资源
    最近更新 更多