异步编程04:异常处理
阅读 2.2k
本篇主要分为两部分,先谈Promise
中的异常处理,最后谈async func
中的异常处理。
Promise中的异常处理
异常处理,常用try catch
来进行,我们先试试是否可以:
function readFile(filePath) {
return new Promise((resolve, reject) => {
console.log(book) // book is not defined
console.log('readFile finished..')
})
}
try {
const readFileTask = readFile('example.json')
console.dir(readFileTask)
} catch (err) {
console.log('Error:', err)
}
在上面代码中,发现通过try-catch无法捕获到错误。try-catch只能捕获普通代码块中的错误,在Promise的executor
中发生的异常,必须用Promise.catch
来捕获:
const readFileTask = readFile('example.json')
readFileTask.catch(err => console.log('Error: ', err))
在executor中发生异常,相当于异步任务执行失败,promise对象的状态变成了rejected
,只能通过Promise对象来捕获。
async func中的异常处理
async func中的异常处理,和普通的代码一样,直接用try-catch对其处理即可:
async function task() {
try {
const result = await Promise.reject(100)
console.log(result)
} catch (e) {
console.log('Error:', e)
}
}
task()
上面代码中,在执行await
时出现了异常,所以后续代码直接跳转到catch块中继续执行,try块中的后续代码会被忽略,不再执行,其结果如下:
Error: 100
因为task()是async func,所以出现异常后,其返回值是一个状态为rejected的Promise对象,如果需要继续处理异常情况的话,可以通过task().catch()
来处理。
task().catch(err=>console.log(err))
小结
关于异步编程,一共写了四篇,到这里就彻底完结了。对于异步编程,还有一些细节无法面面俱到,对于具体的使用方法,可以查阅MDN
上的文档。本系列主要提供一些大方向的点,如果这些点都理解了,那么也就把握住了JavaScript异步编程中的核心。
最后编辑于: 2022-06-28