课程名称: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只对同步代码有效,对异步代码失效。
七月老师非常注重在讲编程知识的同时,讲编程思维,讲知识和知识之间的关系。编程是实践性非常强的工作,学习知识最好的方法是放到项目中。做项目的目的不是做项目,最终要做出来自己的项目,业务承载的是编程知识。明天继续刷后边的课程。