首页 > 解决方案 > 为什么转换流在第一次写入后停止写入?

问题描述

在下面的示例中,它将“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');
}

标签: node.jsnode.js-stream

解决方案


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

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

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

修复它。


推荐阅读