saga使用注意点
-
当saga发现得到的结果是一个Promise对象,它会自动等待该Promise完成,完成之后,会把完成的结果作为值传递到下一次next.
-
如果Promise对象被拒绝,saga会使用generator.throw抛出一个错误
function studentsData() {
return new Promise((resolve, reject) => {
setTimeout(() => {
if (Math.random() > 0.5) {
resolve("数据");
}
else {
reject("错误!!!!");
}
}, 2000);
})
}
function* fetchStudents() {
//设置为正在加载中
yield put(setIsLoading(true))
//当saga发现得到的结果是一个Promise对象,它会自动等待该Promise完成
//完成之后,会把完成的结果作为值传递到下一次next
//如果Promise对象被拒绝,saga会使用generator.throw抛出一个错误
try{
const resp = yield studentsData()
console.log(resp);
}
catch(err){
//err表示reject的内容
console.log(err);
}
}
export default function* () {
yield takeEvery(actionTypes.fetchStudents, fetchStudents);
console.log("正在监听 fetchStudents")
}
3.自动增加和停止的流程控制,流程:自动增加 -> 停止 -> 自动增加 -> 停止
function* autoTask() {
while (true) {
yield take(actionTypes.autoIncrease); //只监听autoIncrease
const task = yield fork(function* () {
try {
while (true) {
yield delay(2000);
yield put(increase());
}
}
finally {
if (yield cancelled()) {
console.log("自增任务被取消掉了!!!")
}
}
})
yield take(actionTypes.stopAutoIncrease); //转而监听stopAutoIncrease
yield cancel(task);
}
}
export default function* () {
yield fork(autoTask);
console.log("正在监听自动增加任务")
}