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.

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

onunhandledrejection = (event) => { }

Ereignistyp

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 bei Promise.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.

js
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:

js
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.

js
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

Browser-Kompatibilität

Siehe auch