ReadableStreamDefaultController: close() 方法
注意: 此功能在 Web Workers 中可用。
ReadableStreamDefaultController
接口的 close()
方法关闭关联的流。
读取器仍然可以从流中读取以前排队的块,但是一旦这些块被读取,流将变为关闭状态。如果您想完全删除流并丢弃任何排队的块,可以使用 ReadableStream.cancel()
或 ReadableStreamDefaultReader.cancel()
。
语法
js
close()
参数
无。
返回值
无 (undefined
)。
异常
TypeError
-
如果在流不可读时调用
close()
,则会抛出此异常——因为它已经关闭、取消或发生错误——或者因为底层源请求关闭,但尚未完成,因为仍有排队的块要读取。
示例
在以下简单的示例中,使用构造函数创建自定义 ReadableStream
(有关完整代码,请参见我们的 简单随机流示例)。start()
函数每秒生成一个随机的文本字符串,并将其排队到流中。还提供了一个 cancel()
函数,如果 ReadableStream.cancel()
出于任何原因被调用,则停止生成。
当按下按钮时,生成将停止,流使用 close()
关闭,并运行另一个函数,该函数从流中读取数据。
js
let interval;
const stream = new ReadableStream({
start(controller) {
interval = setInterval(() => {
let string = randomChars();
// Add the string to the stream
controller.enqueue(string);
// show it on the screen
let listItem = document.createElement("li");
listItem.textContent = string;
list1.appendChild(listItem);
}, 1000);
button.addEventListener("click", () => {
clearInterval(interval);
fetchStream();
controller.close();
});
},
pull(controller) {
// We don't really need a pull in this example
},
cancel() {
// This is called if the reader cancels,
// so we should stop generating strings
clearInterval(interval);
},
});
规范
规范 |
---|
流标准 # ref-for-rs-default-controller-close① |
浏览器兼容性
BCD 表格仅在浏览器中加载