redux-saga中间件使用的注意点

saga使用注意点

  1. 当saga发现得到的结果是一个Promise对象,它会自动等待该Promise完成,完成之后,会把完成的结果作为值传递到下一次next.

  2. 如果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("正在监听自动增加任务")
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值