为啥转换流在第一次写入后停止写入?

Posted

技术标签:

【中文标题】为啥转换流在第一次写入后停止写入?【英文标题】:Why does a Transform stream stop writing after frist write?为什么转换流在第一次写入后停止写入? 【发布时间】:2020-09-17 17:44:06 【问题描述】:

在下面的示例中,它将“foo”写入 process.stdout 一次。为什么不写“foo”10次?

const  Transform  = require('stream');

class Stream extends Transform 

    constructor()
        super(autoDestroy : false, emitClose :false);
    

    _transform(chunk, encoding, callback)
        this.push(chunk);
    


let stream = new Stream();

stream.pipe(process.stdout, end:false);

for (let i = 0; i < 10; i++) 
    stream.write('foo');

【问题讨论】:

【参考方案1】:

它没有打印“foo”10次的原因是我没有仔细阅读文档:

回调函数必须在当前块被完全消耗时调用。如果在处理输入时发生错误,则传递给回调的第一个参数必须是 Error 对象,否则为 null。如果第二个参数传递给回调,它将被转发到 readable.push()...

_transform(chunk, encoding, callback)
    this.push(chunk);
    callback();

修复它。

【讨论】:

以上是关于为啥转换流在第一次写入后停止写入?的主要内容,如果未能解决你的问题,请参考以下文章

为啥在我停止程序之前不会写入文件?

没有写入时,为啥 Elasticsearch 每隔“n”秒执行一次索引?

Audiosystem 过早停止写入 AudioInputStream

labview停止循环为啥波形会清除一次

nodejs fs 读取文件流一次读取多少数据

I/O操作(缓存流,数据流,对象流)