【问题标题】:Redux-saga - how to cancel forked process on action dispatchRedux-saga - 如何取消操作分派的分叉进程
【发布时间】:2018-02-26 23:56:39
【问题描述】:

我有以下传奇:

function* interiorFileSaga() {
  yield [
    takeLatest(wizardActionTypes.UPLOAD_INTERIOR_FILE, handleInteriorFileUpload),
    takeLatest(wizardActionTypes.INTERIOR_FILE_PROCESSING, handleInteriorFileProcessing),
  ]
}

负责上传和处理文件。在 handleInteriorFileProcessing 内部我有一个 while 循环,即检查文件处理进度等。我想取消分叉进程,当我们调度某个操作时 - 当用户更改页面时,在组件卸载时我想停止该进程。我知道取消效果是以过程为参数。有没有办法可以取消所有子进程?这里正确的语法是什么,取消handleInteriorFileProcessing 进程,比如说CANCEL_BACKGROUND_JOB。我是 Saga 初学者,无法找到一种方法来取消 saga 中负责分叉一些任务的进程,例如这里。 最良好的祝愿。

【问题讨论】:

    标签: redux redux-saga


    【解决方案1】:

    最简单的可能就是这样做

    takeLatest([wizardActionTypes.INTERIOR_FILE_PROCESSING, CANCEL_BACKGROUND_JOB], handleInteriorFileProcessing)
    

    然后检查你的函数内部到底发生了什么。 这是因为takeLatest 从该语句中取消正在运行的任务。

    另一种取消事物的方法是使用race 效果,它取消所有“失败者”。

    【讨论】:

      猜你喜欢
      • 2020-10-18
      • 2020-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-01
      • 2017-10-14
      • 2020-07-08
      • 2021-05-21
      相关资源
      最近更新 更多