ReadableStreamDefaultReader

Experimental

这是一个实验中的功能
此功能某些浏览器尚在开发中,请参考浏览器兼容性表格以得到在不同浏览器中适合使用的前缀。由于该功能对应的标准文档可能被重新修订,所以在未来版本的浏览器中该功能的语法和行为可能随之改变。


 Streams API 的 ReadableStreamDefaultReader 的接口 表示一个可被用于读取来自网络提供的流数据(例如 fetch 请求)的默认读取器

构造方法

ReadableStreamDefaultReader()
创建 和 返回 一个 ReadableStreamDefaultReader() 对象实例.

属性

ReadableStreamDefaultReader.closed
   
允许你编写 当stream结束时 执行的代码 . 如果这个stream变成关闭状态或者 reader 的锁(lock)被释放 则返回一个状态是 fulfills的 promise,如果这个stream 报错则返回rejects的promise.

方法

ReadableStreamDefaultReader.cancel()
取消这个 stream, 表示对这个stream失去了兴趣. 提供的参数将传递给源source, 可能会也可能不会用到这些参数.
ReadableStreamDefaultReader.read()
返回一个promise,提供对stream内部队列中下一个块(chunk)访问的promise.
ReadableStreamDefaultReader.releaseLock()
释放读取这个stream的锁.

例子

在下面的例子中, Response 被创建为流 HTML片段 fetched 来自其他源.

它展示了一个 ReadableStream 和一个 Uint8Array组合使用的例子.

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);
        }).then(push);
      };

      push();
    }
  });

  return new Response(stream, { headers: { "Content-Type": "text/html" } });
});

产品规格

Specification Status Comment
Streams
ReadableStreamDefaultReader
Living Standard 初始定义

浏览器兼容性

We're converting our compatibility data into a machine-readable JSON format. This compatibility table still uses the old format, because we haven't yet converted the data it contains. Find out how you can help! (en-US)
Feature Chrome Firefox (Gecko) Internet Explorer Opera Safari (WebKit)
Basic support

52.0

57.0 (57.0) ?

39

?
Feature Android Webview Chrome for Android Firefox Mobile (Gecko) Firefox OS IE Mobile Opera Mobile Safari Mobile
Basic support 52 52 ? ? ? 39 ?