py-tofee / Notes

2 stars 0 forks source link

Promise #14

Open py-tofee opened 3 years ago

py-tofee commented 3 years ago

promise 中抛出的异常能否被 try..catch 捕获,为什么

// 以下代码中,catch不会捕获到promise中的错误,运行到console.log(a)时,会直接报错
try {
  let p = new Promise((resolve) => {
    console.log(a) // ReferenceError: a is not defined
    resolve()
  })
  p.then(() => {
    console.log(1)
  })
} catch (error) {
  console.log(3)
  console.log(error)
}

try..catch 只会捕获同步函数的异常,如果 try 里面包含了异步函数,且异步函数抛出异常,catch是不能捕获到这个异常的;promise的异常只能由reject抛出,由promise.catch捕获; 原因: Event Loop 事件循环机制 宏任务和微任务