异步编程04:异常处理

阅读 2.2k
标签: JavaScript

本篇主要分为两部分,先谈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

评论(0条)

(必填)
复制成功