Tro*_*rks 5 javascript stream fs node.js
我正在使用Node.js v0.10.26,并尝试使用新的stream2 apis http://blog.nodejs.org/2012/12/20/streams2/,特别是Readable api,http:// nodejs.组织/ API/stream.html#stream_class_stream_readable
但'结束'事件永远不会被调用,我无法弄清楚为什么.我认为为什么我的下游Transform流组件没有调用他们的_flush,完成,关闭事件,
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*/ })
Run Code Online (Sandbox Code Playgroud)
readable
readable
Data
readable
readable
Data
readable
Run Code Online (Sandbox Code Playgroud)
更新这个的真正目标是像这样做一个流:
rqt.pipe(zlib.createGunzip()).pipe(csvp).on('finish',function(line){
console.log("Finished Parsing " + csvp.records + ' ' + line);
});
Run Code Online (Sandbox Code Playgroud)
根本没有使用经典模式,在功能上加载一个gzip压缩包,解析csv并显示有多少被发现.加载,解压缩和解析都可以正常工作.
但是没有以下任何一个被调用: - csvp的_flush永远不会被调用 - on('finish'事件
您稍微混合了流动模式和非流动模式 API。来自文档:
请注意,除非数据完全消耗,否则结束事件不会触发。这可以通过切换到流动模式或重复调用 read() 直到读完来完成。
对上面代码片段的最简单的修复就是删除“可读”绑定,然后您应该处于常规流动模式,并且“数据”事件将触发,直到流为空,然后“结束”将触发。
| 归档时间: |
|
| 查看次数: |
4069 次 |
| 最近记录: |