ReadableStream:from() 静态方法

可用性有限

此特性不是基线特性,因为它在一些最广泛使用的浏览器中不起作用。

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

实验性: 这是一项实验性技术
在生产中使用此技术之前,请仔细检查浏览器兼容性表格

ReadableStream.from() 静态方法会从提供的可迭代对象或异步可迭代对象返回一个 ReadableStream

该方法可用于将可迭代对象和异步可迭代对象封装为可读流,包括数组、集合、Promise 数组、异步生成器、ReadableStreams、Node.js readable 流等。

语法

js
ReadableStream.from(anyIterable)

参数

anyIterable

一个 可迭代对象异步可迭代对象

返回值

一个 ReadableStream

异常

TypeError

如果传入的参数不是可迭代对象或异步可迭代对象(未定义 [Symbol.iterator]()[Symbol.asyncIterator]() 方法),则会抛出此错误。如果在迭代过程中,下一步的结果不是对象,或者是一个未解析为对象的 Promise,也会抛出此错误。

示例

将异步迭代器转换为 ReadableStream

这个实时示例演示了如何将异步可迭代对象转换为 ReadableStream,以及之后如何消费此流。

HTML

HTML 由单个 <pre> 元素组成,用于日志记录。

html
<pre id="log"></pre>

JavaScript

示例代码创建了一个 log() 函数来写入 HTML 日志元素。

js
const logElement = document.getElementById("log");
function log(text) {
  logElement.innerText += `${text}\n`;
}

然后,它会检查静态方法是否受支持,如果不支持,则记录结果。

js
if (!ReadableStream.from) {
  log("ReadableStream.from() is not supported");
}

异步可迭代对象是一个匿名生成器函数,在调用三次时会产生 1、2 和 3 的值。将其传递给 ReadableStream.from() 来创建 ReadableStream

js
// Define an asynchronous iterator
const asyncIterator = (async function* () {
  yield 1;
  yield 2;
  yield 3;
})();

// Create ReadableStream from iterator
const myReadableStream = ReadableStream.from(asyncIterator);

使用可读流 演示了消费流的几种方法。下面的代码使用了 for ...await 循环,因为这种方法最简单。循环的每次迭代都会记录来自流的当前块。

js
consumeStream(myReadableStream);

// Iterate a ReadableStream asynchronously
async function consumeStream(readableStream) {
  for await (const chunk of myReadableStream) {
    // Do something with each chunk
    // Here we just log the values
    log(`chunk: ${chunk}`);
  }
}

结果

消费流的输出如下(如果支持 ReadableStream.from())。

将 Array 转换为 ReadableStream

此示例演示了如何将 Array 转换为 ReadableStream

JavaScript

可迭代对象只是一个字符串数组,将其传递给 ReadableStream.from() 来创建 ReadableStream

js
// An Array of vegetable names
const vegetables = ["Carrot", "Broccoli", "Tomato", "Spinach"];

// Create ReadableStream from the Array
const myReadableStream = ReadableStream.from(vegetables);

我们使用与上一个示例相同的日志记录方法和流消费方法,因此此处不再展示。

结果

输出如下。

规范

规范
Streams
# rs-from

浏览器兼容性

另见