Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.

View in English Always switch to English

WorkerGlobalScope: unhandledrejection-Ereignis

Baseline
Weitgehend verfügbar

Diese Funktion ist gut etabliert und funktioniert auf vielen Geräten und in vielen Browserversionen. Sie ist seit Juli 2020 browserübergreifend verfügbar.

Hinweis: Diese Funktion ist nur in Web Workers verfügbar.

Das unhandledrejection-Ereignis wird an den globalen Gültigkeitsbereich eines Skripts (in der Regel WorkerGlobalScope) gesendet, wenn ein Promise ohne Handler für eine Zurückweisung zurückgewiesen wird.

Dies ist nützlich für die Fehlersuche und für eine ersatzweise Fehlerbehandlung in unerwarteten Situationen.

Syntax

Verwenden Sie den Ereignisnamen in addEventListener():

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

Alternativ können Sie ihn der Event-Handler-Eigenschaft der Schnittstelle zuweisen:

js
onunhandledrejection = (event) => { }

Ereignistyp

Ein PromiseRejectionEvent. Erbt von Event.

Event PromiseRejectionEvent

Beispiele

Einfache Fehlerprotokollierung

Dieses Beispiel protokolliert Informationen über die unbehandelte Zurückweisung des Promise in der Konsole.

js
self.addEventListener("unhandledrejection", (event) => {
  console.warn(`UNHANDLED PROMISE REJECTION: ${event.reason}`);
});

Sie können den Event-Listener auch über die Event-Handler-Eigenschaft onunhandledrejection einrichten. Beachten Sie jedoch, dass dadurch gegebenenfalls andere Event-Listener ersetzt werden, die über onunhandledrejection hinzugefügt wurden:

js
self.onunhandledrejection = (event) => {
  console.warn(`UNHANDLED PROMISE REJECTION: ${event.reason}`);
};

Standardverhalten verhindern

Viele Umgebungen (etwa Node.js) geben unbehandelte Zurückweisungen von Promises standardmäßig in der Konsole aus. Sie können dies verhindern, indem Sie einen Handler für unhandledrejection-Ereignisse hinzufügen, der – zusätzlich zu allen anderen gewünschten Aufgaben – preventDefault() aufruft. Dadurch wird das Ereignis abgebrochen und nicht an den Protokollierungscode der Laufzeitumgebung weitergegeben. Dies funktioniert, weil unhandledrejection abgebrochen werden kann.

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();
});

Spezifikationen

Spezifikation
HTML
# handler-workerglobalscope-onunhandledrejection

Browser-Kompatibilität

Siehe auch