【发布时间】:2020-09-03 11:09:14
【问题描述】:
考虑这个可读流:
class ReadableStream extends stream.Readable {
constructor() {
super({objectMode:true, highWaterMark:128});
}
i = 0;
_read(size: number) {
while (this.push({key:this.i++})){}
}
}
到 process.stdout 的管道不会自动排空它。没有任何反应,程序退出。
new ReadableStream().pipe(process.stdout);
现在,让我们将其通过管道传递给这个 Writable 流:
class WritableStream extends stream.Writable {
constructor() {
super({objectMode:true, highWaterMark:128});
}
_write(chunk: any, encoding: string, callback: (error?: (Error | null)) => void) {
console.log(chunk);
callback();
}
}
new ReadableStream().pipe(new WritableStream());
控制台立即被数字填满,因此进入无穷大。
为什么 process.stdout 或 fs.createWriteStream 会自动请求数据?
【问题讨论】:
-
你没有在 objectMode 下尝试过吗?
-
@jfriend00 真的!现在工作。谢谢。
-
process.stdout不是 objectMode 流,所以我猜它不知道当你通过管道传输它时该怎么做。
标签: node.js stream node-streams nodejs-stream