首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >节点js .10 fs.createReadStream streams2结束事件未触发

节点js .10 fs.createReadStream streams2结束事件未触发
EN

Stack Overflow用户
提问于 2014-04-22 00:28:42
回答 1查看 5.7K关注 0票数 5

我正在使用Node.js v0.10.26,并尝试使用新的stream2 api http://blog.nodejs.org/2012/12/20/streams2/,特别是可读的api readable

但是‘结束’事件从来没有被打过电话,我也不知道为什么。我认为这就是为什么我的下游转换流组件没有调用它们的_flush、finish、close事件,

代码语言:javascript
复制
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*/   })

产出:

代码语言:javascript
复制
readable
readable
Data 
readable
readable
Data
readable

更新这个程序的真正目标是做这样的流:

代码语言:javascript
复制
rqt.pipe(zlib.createGunzip()).pipe(csvp).on('finish',function(line){
    console.log("Finished Parsing " + csvp.records + ' ' + line);
});

它根本不使用经典模式,在功能上加载一个gzipped,解析csv并显示找到了多少。加载、解压缩和解析都很好。

但是,以下任何一个都没有被调用:- csvp的_flush从未被调用- on('finish‘事件)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-04-22 00:41:25

您正在混合流模式和非流模式API。从医生那里:

注意,除非完全消耗数据,否则end事件不会触发。这可以通过切换到流模式,或者通过反复调用read()来实现,直到结束为止。

对上面的代码片段最简单的修正就是删除“可读”绑定,然后您应该处于规则的流动模式,“数据”事件将触发,直到流为空,然后“end”会触发。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23208286

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档