Start · Sprachen · JavaScript · Referenz · new GPUUncapturedErrorEvent()

new GPUUncapturedErrorEvent()

Methode

Erstellt ein neues <code>GPUUncapturedErrorEvent</code>, das einen nicht abgefangenen WebGPU-Fehler (<code>GPUError</code>) für das Ereignis <code>uncapturederror</code> transportiert.

seit JavaScript WebGPU – Chrome/Edge 113+, Safari 26+, Firefox 141 Kategorie: webapi

Signatur

new GPUUncapturedErrorEvent(type, options)

Beschreibung

Der Konstruktor GPUUncapturedErrorEvent() erzeugt ein Ereignisobjekt vom Typ GPUUncapturedErrorEvent. Solche Ereignisse löst der Browser normalerweise selbst auf einem GPUDevice aus, wenn ein Validierungs-, Speicher- oder interner Fehler auftritt, der nicht von einem Fehlerbereich aus pushErrorScope()/popErrorScope() abgefangen wurde.

Den Konstruktor selbst ruft man nur selten auf. Nützlich ist er vor allem in Tests, beim Nachbilden (Mocking) von Fehlerpfaden oder wenn eine eigene Abstraktionsschicht Fehler über dieselbe Ereignisschnittstelle weitergeben will. Das erzeugte Ereignis lässt sich mit dispatchEvent() auf einem beliebigen EventTarget auslösen, auch auf einem GPUDevice.

Das Pflichtfeld error im Optionsobjekt muss eine Instanz von GPUError oder einer Unterklasse sein (GPUValidationError, GPUOutOfMemoryError, GPUInternalError). Über die schreibgeschützte Eigenschaft event.error kommt man später wieder an dieses Objekt.

Parameter

Name Typ Default Beschreibung
$type Pflicht string Name des Ereignisses. Groß- und Kleinschreibung zählen. Der Browser nutzt immer "uncapturederror".
$options Pflicht GPUUncapturedErrorEventInit Objekt mit dem Pflichtfeld error (GPUError) und zusätzlich den üblichen EventInit-Feldern bubbles, cancelable und composed (Standard jeweils false).

Rückgabewert

Typ
GPUUncapturedErrorEvent
Beschreibung
Ein neues Ereignisobjekt. Seine Eigenschaft error verweist auf das übergebene GPUError-Objekt.

Beispiele

Ereignis manuell erzeugen und auslesen

const error = new GPUValidationError('Ungültiger Bind-Group-Layout');
const event = new GPUUncapturedErrorEvent('uncapturederror', { error });

console.log(event.type);
console.log(event.error instanceof GPUValidationError);
console.log(event.error.message);
uncapturederror true Ungültiger Bind-Group-Layout

Fehlerbehandlung eines GPUDevice testen

const adapter = await navigator.gpu?.requestAdapter();
if (!adapter) throw new Error('WebGPU nicht verfügbar');
const device = await adapter.requestDevice();

const logged = [];
device.addEventListener('uncapturederror', (e) => {
  logged.push(`${e.error.constructor.name}: ${e.error.message}`);
});

// Fehler künstlich auslösen, um den Handler zu prüfen
device.dispatchEvent(new GPUUncapturedErrorEvent('uncapturederror', {
  error: new GPUOutOfMemoryError('Simulierter Speichermangel')
}));

console.log(logged);
[ 'GPUOutOfMemoryError: Simulierter Speichermangel' ]

Echten nicht abgefangenen Fehler über die on-Property beobachten

const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();

device.onuncapturederror = (event) => {
  console.warn('WebGPU-Fehler:', event.error.message);
};

// Ungültige Verwendung: Puffergröße nicht durch 4 teilbar bei MAP_WRITE+COPY_SRC ist ok,
// aber usage 0 ist ungültig und löst einen Validierungsfehler aus
device.createBuffer({ size: 16, usage: 0 });
WebGPU-Fehler: (browserspezifische Meldung zu ungültigem Buffer-Usage)

// Wichtig · Fallstricke

  • Das Optionsobjekt ist Pflicht. Fehlen options oder options.error, wirft der Konstruktor einen TypeError.
  • Ein selbst ausgelöstes Ereignis hat isTrusted === false. Code, der das prüft, kann es daher von echten Browser-Fehlern unterscheiden.
  • Fehler, die in einem Fehlerbereich (pushErrorScope()) abgefangen werden, lösen kein uncapturederror aus. Sie kommen über das Promise von popErrorScope() zurück.
  • Ohne registrierten Handler geben Browser nicht abgefangene Fehler meist nur in der Konsole aus. Ab einer bestimmten Anzahl von Fehlern werden die Meldungen dort teilweise unterdrückt.
  • Kompatibilität: WebGPU gibt es nur in sicheren Kontexten (HTTPS). Die Unterstützung ist noch nicht in allen Browsern und auf allen Plattformen vollständig. Prüfe deshalb vorher mit 'gpu' in navigator bzw. typeof GPUUncapturedErrorEvent !== 'undefined', ob die API verfügbar ist.