ReadableStreamDefaultReader: cancel() Methode
Baseline
Weitgehend verfügbar
Diese Funktion ist gut etabliert und funktioniert auf vielen Geräten und in vielen Browserversionen. Sie ist seit Januar 2020 browserübergreifend verfügbar.
Hinweis: Diese Funktion ist in Web Workers verfügbar.
Die cancel() Methode der ReadableStreamDefaultReader Schnittstelle gibt ein Promise zurück, das aufgelöst wird, wenn der Stream abgebrochen wird. Durch das Aufrufen dieser Methode signalisiert ein Verbraucher sein Desinteresse am Stream.
cancel() wird verwendet, wenn Sie mit dem Stream vollständig fertig sind und keine weiteren Daten daraus benötigen, selbst wenn es noch Warteschlangen gibt, die darauf warten, gelesen zu werden. Diese Daten gehen verloren, nachdem cancel aufgerufen wurde, und der Stream ist nicht mehr lesbar. Um diese Daten trotzdem zu lesen und den Stream nicht vollständig loszuwerden, würden Sie ReadableStreamDefaultController.close() verwenden.
Hinweis:
Wenn der Leser aktiv ist, verhält sich die
cancel() Methode genauso wie die für den zugehörigen Stream
(ReadableStream.cancel()).
Syntax
cancel()
cancel(reason)
Parameter
reasonOptional-
Ein humanlesbarer Grund für die Stornierung. Dieser Wert wird möglicherweise verwendet oder nicht.
Rückgabewert
Ein Promise, das sich mit dem im reason
Parameter angegebenen Wert erfüllt.
Ausnahmen
TypeError-
Das Quellobjekt ist kein
ReadableStreamDefaultReader, oder der Stream hat keinen Besitzer.
Beispiele
Im folgenden einfachen Beispiel wird ein zuvor erstellter benutzerdefinierter
ReadableStream mit einem ReadableStreamDefaultReader gelesen, der mit getReader() erstellt wurde. (Dieser Code basiert auf unserem einfachen Zufallsstrombeispiel). Jeder Chunk wird nacheinander gelesen und in der Benutzeroberfläche ausgegeben, bis der
Stream fertig gelesen ist. An diesem Punkt beenden wir die rekursive Funktion und geben den gesamten Stream an einem anderen Teil der Benutzeroberfläche aus.
Wenn der Stream fertig ist (if (done)), führen wir reader.cancel() aus,
um den Stream abzubrechen, was signalisiert, dass wir ihn nicht mehr benötigen.
function fetchStream() {
const reader = stream.getReader();
let charsReceived = 0;
// read() returns a promise that resolves
// when a value has been received
reader.read().then(function processText({ done, value }) {
// Result objects contain two properties:
// done - true if the stream has already given you all its data.
// value - some data. Always undefined when done is true.
if (done) {
console.log("Stream complete");
reader.cancel();
para.textContent = result;
return;
}
// value for fetch streams is a Uint8Array
charsReceived += value.length;
const chunk = value;
let listItem = document.createElement("li");
listItem.textContent = `Received ${charsReceived} characters so far. Current chunk = ${chunk}`;
list2.appendChild(listItem);
result += chunk;
// Read some more, and call this function again
return reader.read().then(processText);
});
}
Spezifikationen
| Spezifikation |
|---|
| Streams> # ref-for-generic-reader-cancel②> |