並行
在基礎部分中,我們了解如何使用輔助效果 takeEvery
和 takeLatest
來管理效果之間的並行。
在本部分中,我們將了解使用低階層效果實作這些輔助程式的方法。
takeEvery
import {fork, take} from "redux-saga/effects"
const takeEvery = (pattern, saga, ...args) => fork(function*() {
while (true) {
const action = yield take(pattern)
yield fork(saga, ...args.concat(action))
}
})
takeEvery
允許多個 saga
工作任務同時分岔。
takeLatest
import {cancel, fork, take} from "redux-saga/effects"
const takeLatest = (pattern, saga, ...args) => fork(function*() {
let lastTask
while (true) {
const action = yield take(pattern)
if (lastTask) {
yield cancel(lastTask) // cancel is no-op if the task has already terminated
}
lastTask = yield fork(saga, ...args.concat(action))
}
})
takeLatest
不允許多個 Saga 工作任務同時執行。當它取得新的已發佈動作,就會取消任何先前分岔的工作任務 (如果仍在執行中)。
takeLatest
可用於處理希望僅取得最新要求回應的 AJAX 要求。