Start · Sprachen · JavaScript · Referenz · WebTransport.closed

WebTransport.closed

Eigenschaft

Schreibgeschützte Eigenschaft, die ein <code>Promise</code> liefert, das beim Schließen der WebTransport-Sitzung mit Code und Grund erfüllt oder bei einem Fehler abgelehnt wird.

seit JavaScript Chrome/Edge 97+, Firefox 114+; Safari erst in neue Kategorie: webapi

Signatur

WebTransport.closed

Beschreibung

Die Eigenschaft closed einer WebTransport-Instanz gibt ein Promise zurück, das den Lebenszyklus-Abschluss der Sitzung abbildet. Bei einem geordneten Schließen – egal ob durch transport.close() auf dem Client oder durch den Server – wird es mit einem WebTransportCloseInfo-Objekt erfüllt. Dieses enthält closeCode (eine vorzeichenlose 32-Bit-Zahl) und reason (einen String mit dem Grund).

Bricht die Verbindung dagegen ungeordnet ab, etwa durch einen Netzwerkfehler, einen Zeitablauf oder einen misslungenen Verbindungsaufbau, wird das Promise mit einem WebTransportError abgelehnt. Deshalb sollte man closed immer mit try/catch bzw. .catch() behandeln.

Typische Anwendungsfälle sind Aufräumarbeiten nach Sitzungsende (Timer stoppen, UI aktualisieren, Ressourcen freigeben), Logging von Close-Codes und Logik für automatische Neuverbindungen. closed ergänzt WebTransport.ready, das den erfolgreichen Verbindungsaufbau meldet.

Rückgabewert

Typ
Promise<WebTransportCloseInfo>
Beschreibung
Ein Promise, das mit { closeCode: number, reason: string } erfüllt wird, wenn die Sitzung geordnet geschlossen wurde, oder mit einem WebTransportError abgelehnt wird, wenn sie abbricht. Für eine Instanz wird immer dasselbe Promise-Objekt zurückgegeben.

Beispiele

Geordnetes Schließen erkennen

const transport = new WebTransport('https://example.com:4433/wt');
await transport.ready;

// Überwachung vor dem Schließen einrichten
transport.closed.then(({ closeCode, reason }) => {
  console.log(`Geschlossen – Code ${closeCode}, Grund: "${reason}"`);
});

// Später: Sitzung selbst beenden
transport.close({ closeCode: 1000, reason: 'Sitzung beendet' });
Geschlossen – Code 1000, Grund: "Sitzung beendet"

Abbruch und Fehler mit async/await behandeln

const connect = async (url) => {
  const transport = new WebTransport(url);
  try {
    await transport.ready;
    console.log('Verbunden');
    const info = await transport.closed;
    console.log('Sauber geschlossen:', info.closeCode, info.reason);
  } catch (err) {
    // WebTransportError bei Netzwerkabbruch oder fehlgeschlagenem Aufbau
    console.error('Verbindung abgebrochen:', err.name, err.message, err.source);
  }
};

connect('https://example.com:4433/wt');
Verbunden Verbindung abgebrochen: WebTransportError Connection lost. session

Automatische Neuverbindung mit Backoff

const startSession = async (url, attempt = 0) => {
  const transport = new WebTransport(url);

  transport.closed
    .then(({ closeCode }) => {
      console.log('Server hat geschlossen, Code', closeCode);
    })
    .catch(() => {
      const delay = Math.min(1000 * 2 ** attempt, 30000);
      console.warn(`Abbruch – neuer Versuch in ${delay} ms`);
      setTimeout(() => startSession(url, attempt + 1), delay);
    });

  try {
    await transport.ready;
    attempt = 0;
    console.log('Sitzung aktiv');
  } catch {
    // Fehler wird bereits über closed behandelt
  }
  return transport;
};

startSession('https://example.com:4433/wt');
Sitzung aktiv

// Wichtig · Fallstricke

  • Ablehnung immer abfangen: Schlägt schon der Verbindungsaufbau fehl, werden sowohl ready als auch closed abgelehnt. Ohne .catch() entsteht eine unhandled promise rejection.
  • Der reason-String ist auf 1024 Byte (UTF-8) begrenzt; längere Gründe werden gekürzt. closeCode ist eine vorzeichenlose 32-Bit-Zahl.
  • Wird close() ohne Argumente aufgerufen, ist closeCode 0 und reason ein leerer String.
  • Beim Schließen der Sitzung werden auch alle offenen Streams und Datagramme beendet; ausstehende Lese- und Schreibvorgänge schlagen fehl.
  • Kompatibilität: WebTransport setzt HTTP/3 (QUIC) auf dem Server und einen sicheren Kontext (HTTPS) voraus. Unterstützt in Chromium-Browsern ab Version 97 und Firefox ab 114, auch in Web Workers; Safari erst in neueren Versionen. Vorher per 'WebTransport' in globalThis auf Unterstützung prüfen.