ReadableStreamDefaultReader
注意:此功能在 Web Workers 中可用。
ReadableStreamDefaultReader
是 Streams API 的一个接口,它表示一个默认的读取器,可用于读取从网络(例如 fetch 请求)提供的流数据。
ReadableStreamDefaultReader
可用于从 ReadableStream
读取数据,该数据具有任何类型的底层源(与 ReadableStreamBYOBReader
不同,后者只能用于具有底层字节源的可读流)。
但是请注意,从底层源进行零拷贝传输仅支持自动分配缓冲区的底层字节源。换句话说,流必须已构造,并指定了 type="bytes"
和 autoAllocateChunkSize
。对于任何其他底层源,流始终会从内部队列中使用数据来满足读取请求。
构造函数
ReadableStreamDefaultReader()
-
创建并返回
ReadableStreamDefaultReader
对象实例。
实例属性
ReadableStreamDefaultReader.closed
只读-
返回一个
Promise
,该 Promise 在流关闭时完成,如果流抛出错误或读取器锁被释放,则拒绝。此属性使您能够编写响应流处理结束的代码。
实例方法
ReadableStreamDefaultReader.cancel()
-
返回一个
Promise
,该 Promise 在流被取消时解析。调用此方法表示消费者对流不再感兴趣。提供的reason
参数将传递给底层源,底层源可能会使用它,也可能不会使用它。 ReadableStreamDefaultReader.read()
-
返回一个 promise,提供对流内部队列中下一个块的访问权限。
ReadableStreamDefaultReader.releaseLock()
-
释放读取器对流的锁。
示例
在以下示例中,创建一个人工 Response
,将从另一个资源获取的 HTML 片段流式传输到浏览器。
它演示了如何将 ReadableStream
与 Uint8Array
组合使用。
js
fetch("https://www.example.org/").then((response) => {
const reader = response.body.getReader();
const stream = new ReadableStream({
start(controller) {
// The following function handles each data chunk
function push() {
// "done" is a Boolean and value a "Uint8Array"
return reader.read().then(({ done, value }) => {
// Is there no more data to read?
if (done) {
// Tell the browser that we have finished sending data
controller.close();
return;
}
// Get the data and send it to the browser via the controller
controller.enqueue(value);
push();
});
}
push();
},
});
return new Response(stream, { headers: { "Content-Type": "text/html" } });
});
规范
规范 |
---|
Streams 标准 # default-reader-class |
浏览器兼容性
BCD 表仅在浏览器中加载
另请参见
- Streams API 概念
- 使用可读流
ReadableStream
- WHATWG Stream Visualizer,用于对可读流、可写流和转换流进行基本可视化。
- Web-streams-polyfill 或 sd-streams - polyfills