【发布时间】:2016-06-28 10:08:32
【问题描述】:
只是想了解 redux-sagas 并遇到一个问题,在一个 saga 中设置两个观察者,然后取消它们。
一些背景知识:我有一个 JSON 编辑器组件,其中 saga 处理对后端 API 的调用以加载和保存 JSON 模式。该项目基于React Boilerplate,因此应用程序的结构几乎完全相同。
以下是相关代码:
export function* loadSchemaWatcher() {
const action = yield take(LOAD_SCHEMA)
yield call(loadSchema, action)
}
export function* saveSchemaWatcher() {
while (true) {
const action = yield take(SAVE_SCHEMA)
yield call(saveSchema, action)
}
}
export function* editorData() {
const watcher = yield [
fork(loadSchemaWatcher),
fork(saveSchemaWatcher)
]
yield take(LOCATION_CHANGE)
yield watcher.forEach(task => cancel(task))
}
export default [
editorData,
]
我假设yield watcher.forEach(task => cancel(task)) 只会循环Tasks 的数组,但它们并没有被取消。
【问题讨论】:
-
有什么理由不简单地运行
yield take(LOCATION_CHANGE)然后在editorData()之后立即运行两个分叉?
标签: reactjs redux redux-saga