在 saga 任务中,如果 yield 了一个普通数据,saga 不作任何处理,仅仅将数据传递给 yield 表达式(把得到的数据放到 next 的参数中),因此,在 saga 中,yield 一个普通数据没什么意义。
saga 需要你在 yield 后面放上一些合适的 saga 指令(saga effects),如果放的是指令,saga 中间件会根据不同的指令进行特殊处理,以控制整个任务的流程。
每个指令本质上就是一个函数,该函数调用后,会返回一个指令对象,saga 会接收到该指令对象,进行各种处理
一旦 saga 任务完成(生成器函数运行完成),则 saga 中间件一定结束
指令前面必须使用 yield,以确保该指令的返回结果被 saga 控制
saga 指令
- take 指令:【阻塞】监听某个 action,如果 action 发生了,则会进行下一步处理,take 指令仅监听一次。yield 得到的是完整的 action 对象
- all 指令:【阻塞】该函数传入一个数组,数组中放入生成器,saga 会等待所有的生成器全部完成后才会进一步处理
- takeEvery 指令:不断的监听某个 action,当某个 action 到达之后,运行一个函数。takeEvery 永远不会结束当前的生成器
- delay 指令:【阻塞】阻塞指定的毫秒数
- put 指令:用于重新触发 action,相当于 dispatch 一个 action
- call 指令:【可能阻塞】用于副作用(通常是异步)函数调用
- apply 指令:【可能阻塞】用于副作用(通常是异步)函数调用
- select 指令:用于得到当前仓库中的数据
- cps 指令:【可能阻塞】用于调用那些传统的回调方式的异步函数
I'm so cute. Please give me money.
- Post link: https://blog.gaocaipeng.com/2020/06/29/cgofeg/
- Copyright Notice: All articles in this blog are licensed under unless otherwise stated.