我正在使用Node.js v0.10.26,并尝试使用新的stream2 api http://blog.nodejs.org/2012/12/20/streams2/,特别是可读的api readable
但是‘结束’事件从来没有被打过电话,我也不知道为什么。我认为这就是为什么我的下游转换流组件没有调用它们的_flush、finish、close事件,
var rqt = fs.createReadStream('some.csv.gz');
//readable
rqt.on('readable', function () { console.log('readable!'); })
.on('data', function (data) { console.log('Data!', data); })
.on('error', function (err) { console.error('Error', err);/* READ if there was an error receiving data. */ })
.on('end', function () { console.log('All done!'); /* READ fires when no more data will be provided. */ })
.on('finish', function () { console.log('All Finished!'); /*WRITEABLE */ })
.on('close', function () { console.log('close!'); /*WRITEABLE not all streams emit this*/ })产出:
readable
readable
Data
readable
readable
Data
readable更新这个程序的真正目标是做这样的流:
rqt.pipe(zlib.createGunzip()).pipe(csvp).on('finish',function(line){
console.log("Finished Parsing " + csvp.records + ' ' + line);
});它根本不使用经典模式,在功能上加载一个gzipped,解析csv并显示找到了多少。加载、解压缩和解析都很好。
但是,以下任何一个都没有被调用:- csvp的_flush从未被调用- on('finish‘事件)
发布于 2014-04-22 00:41:25
您正在混合流模式和非流模式API。从医生那里:
注意,除非完全消耗数据,否则end事件不会触发。这可以通过切换到流模式,或者通过反复调用read()来实现,直到结束为止。
对上面的代码片段最简单的修正就是删除“可读”绑定,然后您应该处于规则的流动模式,“数据”事件将触发,直到流为空,然后“end”会触发。
https://stackoverflow.com/questions/23208286
复制相似问题