ReadableStreamDefaultReader: cancel() 方法
注意:此功能在 Web Workers 中可用。
cancel()
方法是 ReadableStreamDefaultReader
接口的一部分,它返回一个 Promise
,该承诺在流被取消时解析。调用此方法表示消费者对流不再感兴趣。
当您完全使用完流并且不再需要从流中获取更多数据时,即使有排队的块正在等待读取,也要使用取消。在调用取消后,这些数据将丢失,并且流不再可读。若要读取这些块并保留流,可以使用 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);
});
}
规范
规范 |
---|
流标准 # ref-for-generic-reader-cancel② |
浏览器兼容性
BCD 表仅在浏览器中加载