Window: unhandledrejection-Ereignis
Das unhandledrejection
-Ereignis wird an den globalen Geltungsbereich eines Scripts gesendet, wenn ein JavaScript-Promise
, das keinen Ablehnungs-Handler hat, abgelehnt wird; typischerweise ist dies das window
, es kann aber auch ein Worker
sein.
Dies ist nützlich zum Debuggen und um eine Notfall-Fehlerbehandlung für unerwartete Situationen bereitzustellen.
Syntax
Verwenden Sie den Ereignisnamen in Methoden wie addEventListener()
oder setzen Sie eine Ereignis-Handler-Eigenschaft.
addEventListener("unhandledrejection", (event) => {});
onunhandledrejection = (event) => {};
Ereignistyp
Ein PromiseRejectionEvent
. Erbt von Event
.
Ereigniseigenschaften
PromiseRejectionEvent.promise
Nur lesbar-
Das JavaScript-
Promise
, das abgelehnt wurde. PromiseRejectionEvent.reason
Nur lesbar-
Ein Wert oder
Object
, der angibt, warum das Promise abgelehnt wurde, wie es anPromise.reject()
übergeben wurde.
Ereignishandler-Aliase
Neben der Window
-Schnittstelle ist die Ereignis-Handler-Eigenschaft onunhandledrejection
auch bei den folgenden Zielen verfügbar:
Verwendungshinweise
Wenn das unhandledrejection
-Ereignis weitergegeben wird, führt das letztendlich dazu, dass eine Fehlermeldung in der Konsole ausgegeben wird. Sie können dies verhindern, indem Sie preventDefault()
auf dem PromiseRejectionEvent
aufrufen; siehe Verhindern der Standardbehandlung unten für ein Beispiel.
Da dieses Ereignis Daten leaken kann, werden Promise
-Ablehnungen, die von einem Cross-Origin-Skript stammen, dieses Ereignis nicht auslösen.
Beispiele
Grundlegende Fehlerprotokollierung
Dieses Beispiel protokolliert Informationen über die unbehandelte Promise-Ablehnung in der Konsole.
window.addEventListener("unhandledrejection", (event) => {
console.warn(`UNHANDLED PROMISE REJECTION: ${event.reason}`);
});
Sie können auch die onunhandledrejection
-Ereignis-Handler-Eigenschaft verwenden, um den Ereignis-Listener einzurichten:
window.onunhandledrejection = (event) => {
console.warn(`UNHANDLED PROMISE REJECTION: ${event.reason}`);
};
Verhindern der Standardbehandlung
Viele Umgebungen (wie Node.js) melden unbehandelte Promise-Ablehnungen standardmäßig in der Konsole. Sie können dies verhindern, indem Sie einen Handler für unhandledrejection
-Ereignisse hinzufügen, der—in Ergänzung zu allen anderen Aufgaben, die Sie ausführen möchten—preventDefault()
aufruft, um das Ereignis abzubrechen und zu verhindern, dass es zur Protokollierungsroutine der Laufzeit aufsteigt. Dies funktioniert, weil unhandledrejection
abbrechbar ist.
window.addEventListener("unhandledrejection", (event) => {
// code for handling the unhandled rejection
// …
// Prevent the default handling (such as outputting the
// error to the console)
event.preventDefault();
});
Spezifikationen
Specification |
---|
HTML Standard # event-unhandledrejection |
HTML Standard # handler-window-onunhandledrejection |
Browser-Kompatibilität
BCD tables only load in the browser