ReadableStreamDefaultController: close() 方法
注意:此功能在 Web Workers 中可用。
ReadableStreamDefaultController 接口的 close() 方法会关闭关联的流。
读者仍然可以读取流中先前已入队(enqueued)的任何块,但一旦这些块被读取完毕,流就会关闭。如果你想完全丢弃流并丢弃任何已入队的块,你应该使用 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);
},
});
规范
| 规范 |
|---|
| Streams # ref-for-rs-default-controller-close① |
浏览器兼容性
加载中…