ReadableStream:from() 静态方法
注意:此功能在 Web Workers 中可用。
ReadableStream.from() 静态方法会从提供的可迭代对象或异步可迭代对象返回一个 ReadableStream。
该方法可用于将可迭代对象和异步可迭代对象封装为可读流,包括数组、集合、Promise 数组、异步生成器、ReadableStreams、Node.js readable 流等。
语法
ReadableStream.from(anyIterable)
参数
返回值
一个 ReadableStream。
异常
TypeError-
如果传入的参数不是可迭代对象或异步可迭代对象(未定义
[Symbol.iterator]()或[Symbol.asyncIterator]()方法),则会抛出此错误。如果在迭代过程中,下一步的结果不是对象,或者是一个未解析为对象的 Promise,也会抛出此错误。
示例
将异步迭代器转换为 ReadableStream
这个实时示例演示了如何将异步可迭代对象转换为 ReadableStream,以及之后如何消费此流。
HTML
HTML 由单个 <pre> 元素组成,用于日志记录。
<pre id="log"></pre>
JavaScript
示例代码创建了一个 log() 函数来写入 HTML 日志元素。
const logElement = document.getElementById("log");
function log(text) {
logElement.innerText += `${text}\n`;
}
然后,它会检查静态方法是否受支持,如果不支持,则记录结果。
if (!ReadableStream.from) {
log("ReadableStream.from() is not supported");
}
异步可迭代对象是一个匿名生成器函数,在调用三次时会产生 1、2 和 3 的值。将其传递给 ReadableStream.from() 来创建 ReadableStream。
// 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 循环,因为这种方法最简单。循环的每次迭代都会记录来自流的当前块。
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。
// An Array of vegetable names
const vegetables = ["Carrot", "Broccoli", "Tomato", "Spinach"];
// Create ReadableStream from the Array
const myReadableStream = ReadableStream.from(vegetables);
我们使用与上一个示例相同的日志记录方法和流消费方法,因此此处不再展示。
结果
输出如下。
规范
| 规范 |
|---|
| Streams # rs-from |
浏览器兼容性
加载中…