为了账号安全,请及时绑定邮箱和手机立即绑定

【金秋打卡】第13天 《Node.js+Koa2+MySQL 打造前后端分离精品项目》

课程名称:Node.js+Koa2+MySQL打造前后端分离精品项目《旧岛》

课程章节:第4章【深入浅出讲异常】异步异常与全局异常处理

视频:4-3 异步异常处理方案

课程讲师: 七月


课程内容:

每个方法理论上说,都需要进行try catch, 这是对异常处理万无一失的处理。

这种try catch只对同步的方法有效。如果是方法内部包含异步操作的话,实际上try catch捕捉不到异常。

//举例说明:方法内部包含异步操作的话,实际上try catch捕捉不到异常
function func1() {
    func2()
}
function func2() {
    try {
        func3()
    } catch (error) {
        console.log('error')
    }
}
function func3() {
    setTimeout(() => {
        throw new Error('error')
    }, 1000);
}

func1()
//此时,无法打印error,

try catch只对同步调用有效。

当函数调用链里边有异步操作的时候,如何进行异常处理?


进行Koa编写时,如果一个函数,返回的是Promise,就可以用async await简化异常链条。

//改造后的代码
function func1() {
    func2()
}
async function func2() {
    try {
        await func3()  
    } catch (error) {
        console.log('error')
    }
}
function func3() {
    // return await setTimeout(function(){
    //  throw new Error('error')
    // }, 1000);
    return new Promise((resolve, reject) => {
        setTimeout(function(){
            const r = Math.random()
            if (r < 0.5) {
                reject('error')
            }
        }, 1000)
    })
}

func1()
//改造后代码的输出结果
notcr@DESKTOP-57RADP4 MINGW64 /d/Koa2/island
$ node test.js
error

notcr@DESKTOP-57RADP4 MINGW64 /d/Koa2/island
$ node test.js

notcr@DESKTOP-57RADP4 MINGW64 /d/Koa2/island
$ node test.js

notcr@DESKTOP-57RADP4 MINGW64 /d/Koa2/island
$ node test.js

notcr@DESKTOP-57RADP4 MINGW64 /d/Koa2/island
$ node test.js

notcr@DESKTOP-57RADP4 MINGW64 /d/Koa2/island
$ node test.js
error
可以看到,当随机数 小于 0.5时, 抛出了异常。

课程收获:

这节课提高了难度,讲了Promise async await。 try catch只对同步代码有效,对异步代码失效。



七月老师非常注重在讲编程知识的同时,讲编程思维,讲知识和知识之间的关系。编程是实践性非常强的工作,学习知识最好的方法是放到项目中。做项目的目的不是做项目,最终要做出来自己的项目,业务承载的是编程知识。明天继续刷后边的课程。

https://img1.sycdn.imooc.com/636622aa0001094911410648.jpg

https://img2.sycdn.imooc.com/636624260001fc8c11330631.jpg

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消