ReadableStreamDefaultReader: cancel() 方法
注意:此功能在 Web Workers 中可用。
ReadableStreamDefaultReader 介面的 cancel() 方法返回一個 Promise,該 Promise 在流被取消時解析。呼叫此方法表示消費者已不再對該流感興趣。
當您已完全使用完流並且不再需要其中任何資料時,可以使用 cancel。即使有待讀取的待處理塊,呼叫 cancel 後,這些資料也會丟失,並且流將不再可讀。如果您仍想讀取這些塊而不完全丟棄流,可以使用 ReadableStreamDefaultController.close()。
注意: 如果讀取器處於活動狀態,則 cancel() 方法的行為與關聯流的 cancel() 方法 (ReadableStream.cancel()) 相同。
語法
js
cancel()
cancel(reason)
引數
reason可選-
取消的可讀原因。此值可能會被使用,也可能不會被使用。
返回值
一個 Promise,它以 reason 引數中給定的值實現。
異常
TypeError-
源物件不是
ReadableStreamDefaultReader,或者流沒有所有者。
示例
在以下簡單示例中,使用透過 getReader() 建立的 ReadableStreamDefaultReader 讀取先前建立的自定義 ReadableStream。(此程式碼基於我們的 簡單隨機流示例)。每個塊按順序讀取並輸出到 UI,直到流讀取完畢,此時我們從遞迴函式中返回,並將整個流列印到 UI 的另一部分。
當流結束時(if (done)),我們執行 reader.cancel() 來取消流,表示我們不再需要使用它。
js
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);
});
}
規範
| 規範 |
|---|
| Streams # ref-for-generic-reader-cancel② |
瀏覽器相容性
載入中…