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 的浏览器中加载。

另请参阅