Window: unhandledrejection event
Das unhandledrejection
-Ereignis wird an den globalen Bereich eines Skripts gesendet, wenn ein JavaScript-Promise
, das keinen Ablehnungs-Handler hat, abgelehnt wird; typischerweise ist dies das window
, kann aber auch ein Worker
sein.
Dies ist nützlich zum Debuggen und für die Bereitstellung einer Fallback-Fehlerbehandlung für unerwartete Situationen.
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
Schreibgeschützt-
Das JavaScript-
Promise
, das abgelehnt wurde. PromiseRejectionEvent.reason
Schreibgeschützt-
Ein Wert oder
Object
, der angibt, warum das Promise abgelehnt wurde, wie beiPromise.reject()
übergeben.
Ereignis-Handler-Alias
Zusätzlich zur Window
-Schnittstelle ist die Ereignis-Handler-Eigenschaft onunhandledrejection
auch auf den folgenden Zielen verfügbar:
Verwendungshinweise
Wenn das unhandledrejection
-Ereignis zugelassen wird zu "bubblen", wird letztendlich eine Fehlermeldung an die Konsole ausgegeben. Sie können dies verhindern, indem Sie preventDefault()
auf dem PromiseRejectionEvent
aufrufen; siehe Verhinderung der Standardbehandlung unten für ein Beispiel.
Da dieses Ereignis Daten leakt, werden Promise
-Ablehnungen, die von einem Skript aus einer anderen Herkunft stammen, dieses Ereignis nicht auslösen.
Beispiele
Einfaches Fehlerprotokollieren
Dieses Beispiel protokolliert Informationen über die nicht behandelte Promise-Zurückweisung in der Konsole.
window.addEventListener("unhandledrejection", (event) => {
console.warn(`UNHANDLED PROMISE REJECTION: ${event.reason}`);
});
Sie können auch die Ereignis-Handler-Eigenschaft onunhandledrejection
verwenden, um den Ereignis-Listener einzurichten:
window.onunhandledrejection = (event) => {
console.warn(`UNHANDLED PROMISE REJECTION: ${event.reason}`);
};
Verhinderung der Standardbehandlung
Viele Umgebungen (wie Node.js) melden nicht behandelte Promise-Zurückweisungen standardmäßig an die Konsole. Sie können dies verhindern, indem Sie einen Handler für unhandledrejection
-Ereignisse hinzufügen, der—in Ergänzung zu anderen Aufgaben, die Sie ausführen möchten—preventDefault()
aufruft, um das Ereignis zu stornieren, und zu verhindern, dass es nach oben "bubbelt" und durch den Logging-Code der Laufzeit behandelt wird. 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 # event-unhandledrejection |
HTML # handler-window-onunhandledrejection |