stream.compose(...streams)
添加于:v16.9.0
Stability: 1 -
stream.compose
是实验性的。参数
streams
<Stream[]> | <Iterable[]> | <AsyncIterable[]> | <Function[]>- 返回: <stream.Duplex>
将两个或多个流组合成 Duplex
流,该流写入第一个流并从最后一个流读取。使用 stream.pipeline
将每个提供的流通过管道传送到下一个。如果任何流错误,则所有流都将被销毁,包括外部Duplex
流。
因为stream.compose
返回一个新流,该流又可以(并且应该)通过管道传输到其他流中,因此它启用了组合。相反,当将流传递给 stream.pipeline
时,通常第一个流是可读流,最后一个流是可写流,形成一个闭路。
如果通过 Function
它必须是采用 source
Iterable
的工厂方法。
import { compose, Transform } from 'node:stream';
const removeSpaces = new Transform({
transform(chunk, encoding, callback) {
callback(null, String(chunk).replace(' ', ''));
}
});
async function* toUpper(source) {
for await (const chunk of source) {
yield String(chunk).toUpperCase();
}
}
let res = '';
for await (const buf of compose(removeSpaces, toUpper).end('hello world')) {
res += buf;
}
console.log(res); // prints 'HELLOWORLD'
stream.compose
可用于将异步迭代、生成器和函数转换为流。
AsyncIterable
转换为可读的Duplex
。无法产生null
。AsyncGeneratorFunction
转换为可读/可写转换Duplex
。必须将源AsyncIterable
作为第一个参数。无法产生null
。AsyncFunction
转换为可写的Duplex
。必须返回null
或undefined
。
import { compose } from 'node:stream';
import { finished } from 'node:stream/promises';
// Convert AsyncIterable into readable Duplex.
const s1 = compose(async function*() {
yield 'Hello';
yield 'World';
}());
// Convert AsyncGenerator into transform Duplex.
const s2 = compose(async function*(source) {
for await (const chunk of source) {
yield String(chunk).toUpperCase();
}
});
let res = '';
// Convert AsyncFunction into writable Duplex.
const s3 = compose(async function(source) {
for await (const chunk of source) {
res += chunk;
}
});
await finished(compose(s1, s2, s3));
console.log(res); // prints 'HELLOWORLD'
相关用法
- Node.js stream.Writable.uncork()用法及代码示例
- Node.js stream.Readable.take(limit[, options])用法及代码示例
- Node.js stream.Readable.pipe(destination[, options])用法及代码示例
- Node.js stream.Readable.setEncoding(encoding)用法及代码示例
- Node.js stream.Readable.some(fn[, options])用法及代码示例
- Node.js stream.Readable.map(fn[, options])用法及代码示例
- Node.js stream.Readable.toArray([options])用法及代码示例
- Node.js stream.Readable.isPaused()用法及代码示例
- Node.js stream.Readable.forEach(fn[, options])用法及代码示例
- Node.js stream.Readable.every(fn[, options])用法及代码示例
- Node.js stream.finished()用法及代码示例
- Node.js stream.Readable.from()用法及代码示例
- Node.js stream.Readable.read([size])用法及代码示例
- Node.js stream.Readable.flatMap(fn[, options])用法及代码示例
- Node.js stream.finished(stream[, options], callback)用法及代码示例
- Node.js stream.Readable.unshift(chunk[, encoding])用法及代码示例
- Node.js stream.Writable.end([chunk[, encoding]][, callback])用法及代码示例
- Node.js stream.Readable.filter(fn[, options])用法及代码示例
- Node.js stream.Readable.asIndexedPairs([options])用法及代码示例
- Node.js stream.Readable.drop(limit[, options])用法及代码示例
- Node.js stream.Readable.resume()用法及代码示例
- Node.js stream.Readable.reduce(fn[, initial[, options]])用法及代码示例
- Node.js stream.addAbortSignal(signal, stream)用法及代码示例
- Node.js stream.Readable.iterator([options])用法及代码示例
- Node.js stream.Writable.destroyed用法及代码示例
注:本文由纯净天空筛选整理自nodejs.org大神的英文原创作品 stream.compose(...streams)。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。