ReadableStreamDefaultReader

注意:此功能在 Web Workers 中可用。

ReadableStreamDefaultReaderStreams 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 片段流式传输到浏览器。

它演示了如何将 ReadableStreamUint8Array 组合使用。

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 表仅在浏览器中加载

另请参见