unhandledrejection
当 Promise
被 reject 且没有 reject 处理器的时候,会触发 unhandledrejection
事件;这可能发生在 window
下,但也可能发生在 Worker
中。这对于调试和为意外情况提供后备错误处理非常有用。
是否冒泡 | No |
---|---|
是否可取消 | Yes |
接口 | PromiseRejectionEvent |
事件处理器属性 |
onunhandledrejection
|
事件属性
unhandledrejection
继承自 PromiseRejectionEvent
,而 PromiseRejectionEvent
又继承自 Event
。因此unhandledrejection
含有 PromiseRejectionEvent
和 Event
的属性和方法。主要包含两个有用的属性:
使用说明
允许 unhandlejection
事件冒泡将最终导致向控制台输出错误消息。可以通过调用 PromiseRejectionEvent
上的 preventDefault()
来阻止这种情况;请参阅下面的阻止默认处理示例。
例子
我们将通过几个例子来展示 unhandledrejection
事件的使用方式。
基本的异常上报
此示例只是将有关未处理的 Promise rejection 信息打印到控制台。
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 rejections。你可以通过为 unhandledrejection
事件添加一个处理程序来避免这种情况的发生,该处理程序除了执行你希望执行的任何其他任务之外,还可以调用 preventDefault()
来取消该事件,从而阻止该事件冒泡并由运行时的日志代码处理。这种方法之所以有效,是因为 unhandledrejection
事件是可以取消的。
window.addEventListener("unhandledrejection", function (event) {
// ...你的代码可以处理未处理的 rejection...
// 阻止默认处理(例如将错误输出到控制台)
event.preventDefault();
});
规范
Specification |
---|
HTML Standard # event-unhandledrejection |
HTML Standard # handler-window-onunhandledrejection |
浏览器兼容性
BCD tables only load in the browser