如何在redux-saga中逐步调用生成器函数?

时间:2017-11-19 18:01:19

标签: reactjs redux redux-saga

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 

1 个答案:

答案 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对象进行鸭子类型检查的分支