ReadableStreamDefaultReader
Baseline 广泛可用 *
注意:此功能在 Web Workers 中可用。
ReadableStreamDefaultReader 接口是 Streams API 的一部分,它表示一个默认的读取器,可用于读取从网络(例如 fetch 请求)提供的数据流。
ReadableStreamDefaultReader 可用于读取任何类型的底层数据源的 ReadableStream(与只能用于具有底层字节源的可读流的 ReadableStreamBYOBReader 不同)。
但请注意,仅当底层源是自动分配缓冲区的底层字节源时,才支持从底层源进行零拷贝传输。换句话说,该流必须在 构造 时同时指定 type="bytes" 和 autoAllocateChunkSize。对于任何其他底层源,流将始终通过内部队列中的数据来满足读取请求。
构造函数
ReadableStreamDefaultReader()-
创建并返回一个
ReadableStreamDefaultReader对象实例。
实例属性
ReadableStreamDefaultReader.closed只读-
返回一个
Promise,当流关闭时,该 Promise 会 fulfilled;如果流抛出错误或读取器的锁被释放,则会 rejected。此属性使您能够编写响应流结束的代码。
实例方法
ReadableStreamDefaultReader.cancel()-
返回一个
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 |
浏览器兼容性
加载中…