Window: unhandledrejection 事件
当一个没有拒绝处理程序的 JavaScript Promise
被拒绝时,unhandledrejection
事件将发送到脚本的全局范围;通常情况下,它是 window
,但也可能是 Worker
。
这对于调试和为意外情况提供后备错误处理很有用。
语法
在 addEventListener()
等方法中使用事件名称,或设置事件处理程序属性。
addEventListener("unhandledrejection", (event) => {});
onunhandledrejection = (event) => {};
事件类型
一个 PromiseRejectionEvent
。继承自 Event
。
事件属性
PromiseRejectionEvent.promise
只读-
被拒绝的 JavaScript
Promise
。 PromiseRejectionEvent.reason
只读-
一个值或
Object
,指示为什么 promise 被拒绝,如传递给Promise.reject()
。
事件处理程序别名
除了 Window
接口之外,事件处理程序属性 onunhandledrejection
也在以下目标上可用
使用说明
允许 unhandledrejection
事件冒泡最终会导致在控制台中输出错误消息。你可以通过在 PromiseRejectionEvent
上调用 preventDefault()
来阻止这种情况;有关示例,请参见下面的 阻止默认处理。
由于此事件可能会泄漏数据,因此来自跨域脚本的 Promise
拒绝不会触发此事件。
示例
基本的错误记录
此示例将有关未处理的 promise 拒绝的信息记录到控制台。
window.addEventListener("unhandledrejection", (event) => {
console.warn(`UNHANDLED PROMISE REJECTION: ${event.reason}`);
});
你也可以使用 onunhandledrejection
事件处理程序属性来设置事件监听器
window.onunhandledrejection = (event) => {
console.warn(`UNHANDLED PROMISE REJECTION: ${event.reason}`);
};
阻止默认处理
许多环境(例如 Node.js)默认情况下将未处理的 promise 拒绝报告到控制台。你可以通过添加一个 unhandledrejection
事件的处理程序来阻止这种情况,该处理程序除了执行你想要执行的任何其他任务之外,还会调用 preventDefault()
来取消事件,从而阻止它冒泡到运行时的日志记录代码进行处理。这是有效的,因为 unhandledrejection
是可取消的。
window.addEventListener("unhandledrejection", (event) => {
// code for handling the unhandled rejection
// …
// Prevent the default handling (such as outputting the
// error to the console)
event.preventDefault();
});
规范
规范 |
---|
HTML 标准 # event-unhandledrejection |
HTML 标准 # handler-window-onunhandledrejection |
浏览器兼容性
BCD 表格仅在启用 JavaScript 的浏览器中加载。