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 |
浏览器兼容性
加载中…