WritableStreamDefaultWriter: close() Methode
Hinweis: Dieses Feature ist verfügbar in Web Workers.
Die close()
-Methode der
WritableStreamDefaultWriter
-Schnittstelle schließt den zugehörigen beschreibbaren
Stream.
Der zugrunde liegende Sink wird alle zuvor geschriebenen Chunks verarbeiten, bevor das Schließverhalten aufgerufen wird. Während dieser Zeit schlagen weitere Schreibversuche fehl (ohne den Stream zu fehlerhaft zu machen).
Syntax
close()
Parameter
Keine.
Rückgabewert
Ein Promise
, der mit undefined
erfüllt wird, wenn alle
verbleibenden Chunks erfolgreich vor dem Schließen geschrieben wurden, oder mit einem Fehler abgelehnt wird,
wenn während des Prozesses ein Problem aufgetreten ist.
Ausnahmen
TypeError
-
Der Stream, den Sie zu schließen versuchen, ist kein
WritableStream
.
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. Jeder Chunk des
kodierten Strings wird mit der write()
-Methode in den Stream geschrieben, wobei die
forEach()
-Methode des kodierten Uint8Array
verwendet wird, um ihn Byte für Byte zu verarbeiten.
Abschließend wird close()
aufgerufen und das zurückgegebene Promise wird behandelt, um
mit Erfolg (oder eventuellen Fehlern) der chunkweisen Schreiboperationen umzugehen.
const list = document.querySelector("ul");
function sendMessage(message, writableStream) {
// defaultWriter is of type WritableStreamDefaultWriter
const defaultWriter = writableStream.getWriter();
const encoder = new TextEncoder();
const encoded = encoder.encode(message);
encoded.forEach((chunk) => {
defaultWriter.ready
.then(() => {
defaultWriter.write(chunk);
})
.then(() => {
console.log("Chunk written to sink.");
})
.catch((err) => {
console.log("Chunk error:", err);
});
});
// Call ready again to ensure that all chunks are written
// before closing the writer.
defaultWriter.ready
.then(() => {
defaultWriter.close();
})
.then(() => {
console.log("All chunks written");
})
.catch((err) => {
console.log("Stream 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 eine Live-Demonstration davon in unserem einfachen Schreibbeispiel ansehen.
Spezifikationen
Specification |
---|
Streams Standard # ref-for-default-writer-close⑦ |
Browser-Kompatibilität
BCD tables only load in the browser