function* mySaga() {
const score1 = yield* call(asyncTsec, 3);
yield put({type:'ADD_ARTIST' , payload:score1 })
const score2 = yield* call(asyncTsec, 1);
yield put({type:'ADD_ARTIST' , payload:score2 })
const score3 = yield* call(asyncTsec, 2);
yield put({type:'ADD_ARTIST' , payload:score3 });
}
如何通过redux-saga逐步调用此函数生成示例?
function* logGenerator() {
console.log(yield);
console.log(yield);
console.log(yield);
}
var gen = logGenerator();
gen.next();
gen.next('pretzel'); // pretzel
gen.next('california'); // california
gen.next('mayonnaise'); // mayonnaise
答案 0 :(得分:1)
如何通过redux-saga逐步调用此函数生成示例?
首先,显然有必要将redux-saga与效果分开,这是生成器函数的特征。从调用方来看,每个生成器只是一个返回iterator的函数,而从内部行为来看,它是可中断的函数,具有保存/恢复执行点。
Redux-saga
只是一种描述可收缩样式的异步进程的方法,取决于所谓的效果列表。每个yield操作(例如yield call(...)
或yield put(...)
只返回special object)取决于saga process manager执行实际操作,例如,等待promises / async函数,并将结果返回到{ {1}}生成器功能的步骤。
如此简单的类似saga的流程管理器可以改写如下:https://stackoverflow.com/a/47302202/7878274。它不支持next
运算符,但可以使用yield*
轻松添加 - 对返回if
对象进行鸭子类型检查的分支