You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Promise构造函数内抛出异常为何未终止后续脚本执行?

为什么Promise执行器抛出异常后脚本仍会继续执行?

这是因为Promise构造函数会自动捕获执行器(executor)内部的同步异常,并将这些异常转化为Promise的拒绝状态,而不是让异常直接冒泡到全局上下文导致脚本终止。

我们一步步拆解你的代码执行流程:

  • 首先同步执行console.log('first'),输出first。
  • 进入new Promise()的执行逻辑:
    • 同步调用传入的executor函数,执行console.log('inside executor'),输出inside executor。
    • 定义let what = 1,尝试执行what()时抛出TypeError,但这个异常被Promise构造函数的内部机制捕获了。
    • Promise将自身状态设为rejected,并把这个异常作为拒绝理由,executor里后续的console.log('not reached')和resolve('Hi Guys!')都不会执行。
  • Promise构造函数执行完成,继续执行后续的同步代码console.log('continues'),输出continues。
  • 当前同步任务队列执行完毕后,JavaScript引擎才会检测到存在未被处理的rejected Promise,此时才会在控制台抛出Uncaught (in promise) TypeError的错误信息。

简单来说,Promise把执行器里的异常“兜住”了,不让它打断当前同步代码的执行,而是把异常留到同步代码跑完之后再报告未捕获的Promise拒绝。

内容的提问来源于stack exchange,提问作者gus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 08:25:00