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② |
浏览器兼容性
加载中…