术语表
这是 Redux Saga 中核心术语的术语表。
Effect
Effect 是一个普通的 JavaScript 对象,包含要由 saga 中间件执行的一些指令。
您可以使用 redux-saga 库提供的工厂函数来创建 Effect。例如,您可以使用 call(myfunc, 'arg1', 'arg2')
指示中间件调用 myfunc('arg1', 'arg2')
并将结果返回给生成 Effect 的 Generator。
Task
Task 就像在后台运行的进程。在基于 redux-saga 的应用程序中,可以有多个 Task 并行运行。您可以使用 fork
函数创建 Task。
import {fork} from "redux-saga/effects"
function* saga() {
...
const task = yield fork(otherSaga, ...args)
...
}
阻塞/非阻塞调用
阻塞调用意味着 Saga 生成了一个 Effect,并将等待其执行结果,然后再继续执行生成 Effect 的 Generator 中的下一条指令。
非阻塞调用意味着 Saga 将在生成 Effect 后立即继续执行。
例如
import {call, cancel, join, take, put} from "redux-saga/effects"
function* saga() {
yield take(ACTION) // Blocking: will wait for the action
yield call(ApiFn, ...args) // Blocking: will wait for ApiFn (If ApiFn returns a Promise)
yield call(otherSaga, ...args) // Blocking: will wait for otherSaga to terminate
yield put(...) // Non-Blocking: will dispatch within internal scheduler
const task = yield fork(otherSaga, ...args) // Non-blocking: will not wait for otherSaga
yield cancel(task) // Non-blocking: will resume immediately
// or
yield join(task) // Blocking: will wait for the task to terminate
}
观察者/工作者
指的是使用两个独立的 Saga 来组织控制流的方式
观察者:会监听分派的 action,并在每个 action 上派生一个工作者
工作者:会处理 action 并终止
示例
function* watcher() {
while (true) {
const action = yield take(ACTION)
yield fork(worker, action.payload)
}
}
function* worker(payload) {
// ... do some stuff
}