WorkerGlobalScope:unhandledrejection 事件

Baseline 已广泛支持

此特性已经十分成熟,可在许多设备和浏览器版本上使用。自 2020 年 7 月以来,它已在各大浏览器中可用。

注意:此功能仅在 Web Workers 中可用。

当一个没有拒绝处理程序的 Promise 被拒绝时,会将 unhandledrejection 事件发送到脚本的全局作用域(通常是 WorkerGlobalScope)。

这对于调试和为意外情况提供备用错误处理非常有用。

语法

在诸如 addEventListener() 之类的方法中使用事件名称,或设置事件处理程序属性。

js
addEventListener("unhandledrejection", (event) => { })

onunhandledrejection = (event) => { }

事件类型

一个 PromiseRejectionEvent。继承自 Event

Event PromiseRejectionEvent

事件属性

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

浏览器兼容性

另见