Javascript

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

本文主要是介绍【金秋打卡】第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

这篇关于【金秋打卡】第13天 《Node.js+Koa2+MySQL 打造前后端分离精品项目》的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!