stream.Readable.from(iterable[, options])


  • iterable <Iterable> 实现 Symbol.asyncIteratorSymbol.iterator 可迭代协议的对象。如果传递空值,则触发 'error' 事件。

    ¥iterable <Iterable> Object implementing the Symbol.asyncIterator or Symbol.iterator iterable protocol. Emits an 'error' event if a null value is passed.

  • options <Object> 提供给 new stream.Readable([options]) 的选项。默认情况下,Readable.from() 会将 options.objectMode 设置为 true,除非通过将 options.objectMode 设置为 false 明确选择退出。

    ¥options <Object> Options provided to new stream.Readable([options]). By default, Readable.from() will set options.objectMode to true, unless this is explicitly opted out by setting options.objectMode to false.

  • 返回:<stream.Readable>

    ¥Returns: <stream.Readable>

用于从迭代器中创建可读流的实用方法。

¥A utility method for creating readable streams out of iterators.

const { Readable } = require('node:stream');

async function * generate() {
  yield 'hello';
  yield 'streams';
}

const readable = Readable.from(generate());

readable.on('data', (chunk) => {
  console.log(chunk);
}); 

出于性能原因,调用 Readable.from(string)Readable.from(buffer) 不会迭代字符串或缓冲区以匹配其他流语义。

¥Calling Readable.from(string) or Readable.from(buffer) will not have the strings or buffers be iterated to match the other streams semantics for performance reasons.

如果将包含 promise 的 Iterable 对象作为参数传递,可能会导致未处理的拒绝。

¥If an Iterable object containing promises is passed as an argument, it might result in unhandled rejection.

const { Readable } = require('node:stream');

Readable.from([
  new Promise((resolve) => setTimeout(resolve('1'), 1500)),
  new Promise((_, reject) => setTimeout(reject(new Error('2')), 1000)), // Unhandled rejection
]);