Bootstrap

try catch 里的promise报错,catch会捕捉到吗

如果是promise的语法错误会捕获,如果是promise里面抛出的错误不会捕获到。

这里涉及到事件循环机制,任务分为:同步任务和异步任务,异步任务分为宏任务和微任务,大家都比较了解,同步任务先执行,异步任务进入队列排队等待执行,同步任务执行完成后,开始执行异步任务,因为每一个script标签是宏任务,无可厚非,宏任务优先于微任务先执行。这个就是事件循环机制的大概了。

什么是语法错误呢,最简单的举例就是单词写错了,控制台报错了:

try {
  Promise.reect('发生错误了');
} catch (e) {
  console.log('捕获到了错误:', e);
}

什么是promise内部抛出的错误了呢:

try {
  Promise.reject('发生错误了');
} catch (e) {
  console.log('捕获到了错误:', e);
}

其实这个问题会连带好多问题出现,基本上都是围绕着事件循环去分析的。
还有一个问题点值得大家去注意下,那就是 async 和await,大家看一下下面例子:

async function exampleFunction() {
  try {
    await Promise.reject('发生错误了');
  } catch (e) {
    console.log('捕获到了错误:', e);
  }
}

exampleFunction();

会不会捕获到错误呢,答案是会的,因为await是中断执行操作,代码自上而下执行,虽然async是异步的,但是遇到await就要等 promise执行完毕后再继续向下执行。
 

好了,看了上面的例子,想必大家的了解更加深刻一点了

;