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

关于unhandledrejection事件发送至脚本全局作用域的技术疑问

关于unhandledrejection事件的两个问题解答

1. “事件被发送至脚本的全局作用域”具体指什么?

当没有拒绝处理程序的JavaScript Promise被拒绝时,unhandledrejection事件会被发送至脚本的全局作用域;通常是window对象,也可能是Worker。

这里的“全局作用域”就是当前代码运行环境的顶层上下文:

  • 在浏览器页面中,这个顶层上下文就是window对象,你直接调用addEventListener绑定事件时,默认就是给window添加监听器;
  • 在Web Worker环境中,顶层上下文则是self对象。

简单来说,这个未处理的Promise拒绝事件会被抛到当前执行环境的最顶层,让你能在全局层面捕获并处理它,而不是被局限在某个函数或局部作用域里。

2. 出现未处理的Promise拒绝后,脚本无法继续执行吗?

不会。未处理的Promise拒绝只会触发unhandledrejection事件,但不会中断后续代码的执行流程。

拿你的测试代码举例,哪怕加上后续执行的代码:

addEventListener('unhandledrejection', (event) => {
  console.log('unhandledrejection');
  console.log(event.promise);
  console.log(event.reason);
});
Promise.reject('sss');
console.log('脚本仍在执行');

运行后控制台会先输出unhandledrejection相关日志,紧接着输出脚本仍在执行,这就证明脚本没有因为未处理的Promise拒绝而停止。

不过要注意:部分旧浏览器或特定环境下会在控制台抛出警告,但这不会影响代码继续运行;Node.js的新版本中未处理的Promise拒绝可能导致进程退出,但浏览器环境下基本不会出现这种情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 18:54:57