跳至主要内容

术语表

这是 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
}