跳到主要内容

术语表

这是 Redux Saga 的核心术语的术语表。

Effect

Effect 是一个包含一些由 saga 中间件执行的指令的普通 JavaScript 对象。

你可以使用 redux-saga 库提供的工厂函数创建 effects。例如,你可以使用 call(myfunc, 'arg1', 'arg2') 指示中间件调用 myfunc('arg1', 'arg2') 并将结果返回给产生 effect 的 Generator。

Task

Task 就像是在后台运行的进程。在基于 redux-saga 的应用程序中,可以有多个并行运行的任务。你可以使用 fork 函数创建任务。

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) // 阻塞:将等待 action
yield call(ApiFn, ...args) // 阻塞:将等待 ApiFn(如果 ApiFn 返回 Promise)
yield call(otherSaga, ...args) // 阻塞:将等待 otherSaga 结束

yield put(...) // 非阻塞:将在内部调度器中分派

const task = yield fork(otherSaga, ...args) // 非阻塞:不会等待 otherSaga
yield cancel(task) // 非阻塞:将立即恢复
// 或
yield join(task) // 阻塞:将等待任务结束
}

Watcher/Worker

指的是使用两个独立的 Sagas 组织控制流的方式

  • 观察者(Watcher):将观察分派的操作,并在每个操作上分叉一个 worker

  • 工作者(Worker):将处理操作并终止

示例

function* watcher() {
while (true) {
const action = yield take(ACTION)
yield fork(worker, action.payload)
}
}

function* worker(payload) {
// ... 做一些事情
}