--- title: unhandledrejection slug: Web/Events/unhandledrejection tags: - API - JavaScript - Promise - unhandledrejection - 事件 - 参考 translation_of: Web/API/Window/unhandledrejection_event ---
当{{jsxref("Promise")}} 被 reject 且没有 reject 处理器的时候,会触发 unhandledrejection
事件;这可能发生在 {{domxref("window")}} 下,但也可能发生在 {{domxref("Worker")}} 中。 这对于调试回退错误处理非常有用。
是否冒泡 | No |
---|---|
是否可取消 | Yes |
接口 | {{domxref("PromiseRejectionEvent")}} |
事件处理器属性 | {{domxref("WindowEventHandlers.onunhandledrejection", "onunhandledrejection")}} |
unhandledrejection
继承自 {{domxref("PromiseRejectionEvent")}},而 {{domxref("PromiseRejectionEvent")}} 又继承自 {{domxref("Event")}}。因此unhandledrejection
含有 PromiseRejectionEvent
和 Event
的属性和方法。
Here we have a few examples showing ways you can make use of the unhandledrejection
event. The event includes two useful pieces of information:
我们将通过几个例子来展示 unhandledrejection
事件的使用方式。该事件主要包含两部分有用的信息:
promise
reason
此示例只是将有关未处理的 Promise rejection 信息打印到控制台。
window.addEventListener("unhandledrejection", event => { console.warn(`UNHANDLED PROMISE REJECTION: ${event.reason}`); });
您还可以使用 {{domxref("WindowEventHandlers.onunhandledrejection", "onunhandledrejection")}} 事件处理程序属性来设置事件侦听器:
window.onunhandledrejection = event => { console.warn(`UNHANDLED PROMISE REJECTION: ${event.reason}`); };
许多环境(例如 {{Glossary("Node.js")}} ) 默认情况下会向控制台打印未处理的 Promise rejections。您可以通过添加一个处理程序来防止 unhandledrejection
这种情况的发生,该处理程序除了您希望执行的任何其他任务之外,还可以调用 {{domxref("Event.preventDefault()", "preventDefault()")}} 来取消该事件,从而防止该事件冒泡并由运行时的日志代码处理。这种方法之所以有效,是因为 unhandledrejection
是可以取消的。
window.addEventListener('unhandledrejection', function (event) { // ...您的代码可以处理未处理的拒绝... // 防止默认处理(例如将错误输出到控制台) event.preventDefault(); });
Specification | Status | Comment |
---|---|---|
{{SpecName('HTML WHATWG', 'webappapis.html#unhandled-promise-rejections', 'unhandledrejection')}} | {{Spec2('HTML WHATWG')}} | Initial definition. |
{{Compat("api.Window.unhandledrejection_event")}}
[1] The corresponding event handler property is defined on the {{domxref("WindowEventHandlers")}} mixin, which is available on both the {{domxref("Window")}} interface and all types of {{domxref("Worker")}} interfaces.