ReadableStreamDefaultReader()

Limited availability

This feature is not Baseline because it does not work in some of the most widely-used browsers.

ReadableStreamDefaultReader() 构造函数创建并返回一个 ReadableStreamDefaultReader 实例对象。

备注: 你通常不需要手动创建,可以使用 ReadableStream.getReader() 方法代替。

语法

js
new ReadableStreamDefaultReader(stream)

参数

stream

将被读取的 ReadableStream

返回值

一个 ReadableStreamDefaultReader 实例对象。

异常

TypeError

如果提供的 stream 参数不是一个 ReadableStream,或者它已经被另一个 reader 锁定则抛出异常。

示例

在下面的简单示例中,使用 getReader() 创建的 ReadableStreamDefaultReader 读取先前自定义的 ReadableStream。(有关完整代码简单随机流演示)。直到流完成读取,每一个块都按顺序读取并输出到 UI,此时我们退出递归函数并且将整个流打印到 UI 的另一部分。

js
function fetchStream() {
  const reader = stream.getReader();
  let charsReceived = 0;
  // read() 返回一个 promise,其会在接收到数据时被兑现
  reader.read().then(function processText({ done, value }) {
    // 结果包含两个属性:
    // done  - 如果为 true,表示流已经返回所有的数据。
    // value - 一些数据,done 为 true 时,其值始终为 undefined。
    if (done) {
      console.log("Stream complete");
      para.textContent = result;
      return;
    }
    // 从流中获取的数据是一个 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;
    // 再次调用该函数以读取更多数据
    return reader.read().then(processText);
  });
}

规范

Specification
Streams Standard
# ref-for-default-reader-constructor①

浏览器兼容性

BCD tables only load in the browser

参见