几周以来,我一直在尝试理解为什么当我尝试在我的 root saga 中运行
yield cancel
效果时,我的 cancel
会抛出错误:
export function* loginData() {
const watcher = yield fork(getLoginWatcher);
yield take(LOCATION_CHANGE);
yield cancel(watcher);
}
控制台错误:
utils.js:202 uncaught at getLogin Generator is already running"
如果我删除取消,我的传奇就不会被取消。这就像同时工作并抛出错误。
这个错误真的让我很恼火,看起来我的应用程序有问题。
执行环境:
有谁知道
redux-saga/effects
proc 如何处理它的 cancel
效果以及 如何 已经运行 错误生成。
我认为造成这种情况的原因可能不是描述中所述的取消效果。我试图使用react-boilerplate独立完成类似的登录过程,并发现许多其他示例使用的方法比最新的样板代码更旧,所以一直在解决这些问题,我也得到了这个确切的错误,调用堆栈中的内容似乎来自取消效果。 然而,当阅读此处发布的同一问题时https://github.com/react-boilerplate/react-boilerplate/issues/1281有人建议这实际上是一个错误,因为正在调用“forwardTo”不使用
yield 调用(forwardTo,参数)
一旦我将传奇中的调用更改为此,错误就消失了。我认为这就是问题的解决方案。其他人似乎在 github 问题页面上也同意。
这可能会对那里的人有所帮助。所以我也遇到了与此相关的问题,这并不是取消效果,而是调度一个再次运行相同传奇的操作。所以这是你应该注意的事情。有点递归的逻辑。