redux-saga - Redux-Saga - 触发取消操作时取消所有其他 saga
问题描述
在我的项目中,我有一个根 saga,它监视几个动作并进行一些 API 调用。在某些情况下,我想取消那些 sagas 和 API 调用。
现在它是这样组成的:
export default function*() {
yield all([
takeLatest(ActionTypes.GET_ACTION_ONE, getOneSaga),
takeLatest(ActionTypes.GET_ACTION_TWO, getTwoSaga),
]);
}
而且我有ActionTypes.CANCEL
,当它被解雇时,我希望取消任何其他传奇(getOneSaga
和getTwoSaga
),并且我想设法yield cancelled()
取消其中的 API 调用。
那么,我如何组合我的所有动作并取消动作。
解决方案
你可以使用race
效果:
export default function* () {
yield race([
take(ActionTypes.CANCEL),
all([
takeLatest(ActionTypes.GET_ACTION_ONE, getOneSaga),
takeLatest(ActionTypes.GET_ACTION_TWO, getTwoSaga),
]),
]);
}
创建一个 Effect 描述,指示中间件在多个 Effect 之间运行Race 。解决Race时,中间件会自动取消所有失败的Effects
推荐阅读
- c# - 使用 Entity Framework 和 .NET Core 循环引用中的无限循环
- database - 哪个更好,在后端对数据进行迭代和排序,还是让数据库处理?
- python - AttributeError:“str”对象没有属性“in_dir”
- python - 需要创建一个函数 cumsum 来返回一个列表 l 的累积和
- amazon-web-services - Lambda 安全组到 S3 和 Secrets Manager
- python - 在服务器上找不到请求的 URL。如果您手动输入了 URL,请检查您的拼写并重试。烧瓶
- html - 如何将样式添加到 base.html:Django 框架?
- python - 如何在 python 中使用 opencv 将视频的特定部分保存到单独的视频中?
- php - How to display errors for invalid login?
- angular - 检测窗口何时滚动超过Angular中的div