ham*_*lin 3 reactjs redux redux-saga
只是试图让我的头围绕redux-sagas并遇到一个问题,在一个传奇中设置两个观察者,然后取消它们.
一些背景:我有一个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,
]
Run Code Online (Sandbox Code Playgroud)
我假设yield watcher.forEach(task => cancel(task))只会遍历任务数组,但它们不会被取消.
您的代码不起作用,因为forEach返回undefined.你必须用它来替换它将map返回一系列取消效果
yield watcher.map(task => cancel(task))
Run Code Online (Sandbox Code Playgroud)
您还可以使用race效果以声明方式取消整个数组效果.注意fork已被替换为call
export function* editorData() {
yield race([
[
call(loadSchemaWatcher),
call(saveSchemaWatcher)
],
take(LOCATION_CHANGE)
])
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1055 次 |
| 最近记录: |