首页 > 解决方案 > 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,当它被解雇时,我希望取消任何其他传奇(getOneSagagetTwoSaga),并且我想设法yield cancelled()取消其中的 API 调用。

那么,我如何组合我的所有动作并取消动作。

标签: redux-saga

解决方案


你可以使用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


推荐阅读