WorkerGlobalScope:unhandledrejection 事件
注意:此功能仅在Web Workers中可用。
当没有拒绝处理程序的Promise
被拒绝时,unhandledrejection
事件将发送到脚本的全局作用域(通常为WorkerGlobalScope
)。
这对于调试和为意外情况提供后备错误处理非常有用。
语法
在诸如addEventListener()
之类的方法中使用事件名称,或设置事件处理程序属性。
js
self.addEventListener("unhandledrejection", (event) => {});
self.onunhandledrejection = (event) => {};
事件类型
事件属性
PromiseRejectionEvent.promise
只读-
被拒绝的 JavaScript
Promise
。 PromiseRejectionEvent.reason
只读-
一个值或
Object
,指示 promise 被拒绝的原因,如传递给Promise.reject()
。
示例
基本错误日志记录
此示例将有关未处理的 promise 拒绝的信息记录到控制台。
js
self.addEventListener("unhandledrejection", (event) => {
console.warn(`UNHANDLED PROMISE REJECTION: ${event.reason}`);
});
您还可以使用onunhandledrejection
事件处理程序属性来设置事件侦听器
js
self.onunhandledrejection = (event) => {
console.warn(`UNHANDLED PROMISE REJECTION: ${event.reason}`);
};
防止默认处理
许多环境(例如Node.js)默认情况下会将未处理的 promise 拒绝报告到控制台。您可以通过添加一个unhandledrejection
事件的处理程序来防止这种情况发生,该处理程序除了您希望执行的任何其他任务外,还调用preventDefault()
以取消事件,阻止其冒泡到运行时日志记录代码进行处理。这是有效的,因为unhandledrejection
是可以取消的。
js
self.addEventListener("unhandledrejection", (event) => {
// code for handling the unhandled rejection
// …
// Prevent the default handling (such as outputting the
// error to the console)
event.preventDefault();
});
规范
规范 |
---|
HTML 标准 # handler-workerglobalscope-onunhandledrejection |
浏览器兼容性
BCD 表仅在启用 JavaScript 的浏览器中加载。