WritableStreamDefaultWriter

Hinweis: Dieses Feature ist verfügbar in Web Workers.

Die WritableStreamDefaultWriter-Schnittstelle der Streams-API ist das Objekt, das von WritableStream.getWriter() zurückgegeben wird, und sperrt nach der Erstellung den Writer an den WritableStream, um sicherzustellen, dass keine anderen Streams auf das zugrunde liegende Sink schreiben können.

Konstruktor

WritableStreamDefaultWriter()

Erzeugt eine neue Instanz eines WritableStreamDefaultWriter-Objekts.

Instanz-Eigenschaften

WritableStreamDefaultWriter.closed Nur lesbar

Ermöglicht es Ihnen, Code zu schreiben, der auf das Ende des Streaming-Prozesses reagiert. Gibt ein Versprechen zurück, das erfüllt wird, wenn der Stream geschlossen wird, oder abgelehnt wird, wenn der Stream fehlerhaft ist oder die Sperre des Writers freigegeben wird.

WritableStreamDefaultWriter.desiredSize Nur lesbar

Gibt die gewünschte Größe zurück, die erforderlich ist, um die interne Warteschlange des Streams zu füllen.

WritableStreamDefaultWriter.ready Nur lesbar

Gibt ein Promise zurück, das aufgelöst wird, wenn die gewünschte Größe der internen Warteschlange des Streams vom nicht positiven Bereich in den positiven Bereich übergeht und signalisiert, dass kein Backpressure mehr angewendet wird.

Instanz-Methoden

WritableStreamDefaultWriter.abort()

Bricht den Stream ab und signalisiert, dass der Produzent nicht mehr erfolgreich in den Stream schreiben kann, und es wird sofort in einen Fehlerzustand überführt, wobei alle aufgestauten Schreibvorgänge verworfen werden.

WritableStreamDefaultWriter.close()

Schließt den zugehörigen beschreibbaren Stream.

WritableStreamDefaultWriter.releaseLock()

Gibt die Sperre des Writers für den entsprechenden Stream frei. Nachdem die Sperre freigegeben wurde, ist der Writer nicht mehr aktiv. Wenn der zugehörige Stream beim Freigeben der Sperre fehlerhaft ist, wird der Writer denselben Fehlerzustand beibehalten; andernfalls wird der Writer als geschlossen angezeigt.

WritableStreamDefaultWriter.write()

Schreibt ein übergebenes Datenstück in einen WritableStream und dessen zugrunde liegendes Sink und gibt ein Promise zurück, das die Erfolgs- oder Fehlschlaganzeige des Schreibvorgangs angibt.

Beispiele

Das folgende Beispiel zeigt die Erstellung eines WritableStream mit einem benutzerdefinierten Sink und einer von der API bereitgestellten Warteschlangenstrategie. Es ruft dann eine Funktion namens sendMessage() auf, wobei der neu erstellte Stream und ein String übergeben werden. Innerhalb dieser Funktion wird die getWriter()-Methode des Streams aufgerufen, die eine Instanz von WritableStreamDefaultWriter zurückgibt. Ein forEach()-Aufruf wird verwendet, um jeden Teil des Strings in den Stream zu schreiben. Schließlich geben write() und close() Versprechen zurück, die verarbeitet werden, um den Erfolg oder das Scheitern von Teilen und Streams zu behandeln.

js
const list = document.querySelector("ul");

async function sendMessage(message, writableStream) {
  // defaultWriter is of type WritableStreamDefaultWriter
  const defaultWriter = writableStream.getWriter();
  const encoder = new TextEncoder();
  const encoded = encoder.encode(message);

  try {
    for (const chunk of encoded) {
      await defaultWriter.ready;
      await defaultWriter.write(chunk);
      console.log("Chunk written to sink.");
    }
    // Call ready again to ensure that all chunks are written
    // before closing the writer.
    await defaultWriter.ready;
    await defaultWriter.close();
    console.log("All chunks written");
  } catch (err) {
    console.log("Error:", err);
  }
}

const decoder = new TextDecoder("utf-8");
const queuingStrategy = new CountQueuingStrategy({ highWaterMark: 1 });
let result = "";
const writableStream = new WritableStream(
  {
    // Implement the sink
    write(chunk) {
      return new Promise((resolve, reject) => {
        const buffer = new ArrayBuffer(1);
        const view = new Uint8Array(buffer);
        view[0] = chunk;
        const decoded = decoder.decode(view, { stream: true });
        const listItem = document.createElement("li");
        listItem.textContent = `Chunk decoded: ${decoded}`;
        list.appendChild(listItem);
        result += decoded;
        resolve();
      });
    },
    close() {
      const listItem = document.createElement("li");
      listItem.textContent = `[MESSAGE RECEIVED] ${result}`;
      list.appendChild(listItem);
    },
    abort(err) {
      console.log("Sink error:", err);
    },
  },
  queuingStrategy,
);

sendMessage("Hello, world.", writableStream);

Sie können den vollständigen Code in unserem einfachen Writer-Beispiel finden.

Spezifikationen

Specification
Streams Standard
# default-writer-class

Browser-Kompatibilität

BCD tables only load in the browser