redux-saga について頭を悩ませようとして、saga で 2 つのウォッチャーを設定してからキャンセルするという問題に遭遇しました。
背景: サガがバックエンド API への呼び出しを処理して JSON スキーマをロードおよび保存する 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))
の配列をループするだけだと思いましたが、キャンセルされていません。