Node.js ReadStream从不调用'data'侦听器
Node.js ReadStream never calls 'data' listener
我有一个名为a.t txt的文件,我可以使用fs.readFile打开和读取。然而,我似乎无法读取它与createReadStream:
var fs = require('fs');
var stream = fs.createReadStream('a.txt');
stream.on('data', function() { console.log('data present'); });
这从来没有打印任何东西,我错过了什么?
如果这种情况发生在我身上。当您在REPL中运行这段代码时,控制流将返回到您键入的每一行之间的节点事件循环。当这种情况发生时,节点会抓住机会执行任何挂起的IO。但是因为你没有附加一个监听器,"数据"事件就会愉快地被遗忘。
可以通过将上面的代码粘贴到javascript文件中并将其作为脚本运行来验证这一点。它工作得很好,因为在控制返回到事件循环之前附加了侦听器。
我们遇到的这个问题的版本是当打开一个流并试图在回调中使用它时。在封闭函数中打开流并从回调中引用它不起作用-节点在事件侦听器附加之前已经泵出了所有数据。
有两种方法可以解决这个问题:要么在打开流时立即调用pause,要么确保在执行任何回调之前附加侦听器。
尝试:
var data = '';
var rs = fs.createReadStream('/path/to/file');
rs.on('data', function(data) {
data += data;
});
rs.on('end', function() {
console.log(data);
});
为确保无误,请尝试正确获取文件的路径。
var path = __dirname + '/a.txt';
console.log(path);
var stream = fs.createReadStream(path);
相关文章:
- Highslide(iframe的侦听器)
- 如何在for循环中添加事件侦听器
- 选项卡侦听器未被来自后台脚本的消息激活
- 未命中服务器发送的事件侦听器
- 如何覆盖原型中的事件侦听器
- 加载侦听器上的函数触发得太早
- 无法将事件侦听器附加到画布
- 如何在d3.js中自定义事件侦听器
- 在es6中,将带有回调的事件侦听器设置为可迭代的
- 事件侦听器未在chrome扩展中的options.js中启动
- IE8更改文本区域上的事件侦听器不工作
- 将事件侦听器添加到文档,而不是签入元素存在,然后添加事件侦听器
- jQuery将侦听器的大小调整为只触发宽度的变化
- javascript删除事件侦听器
- 我应该/如何清除mousemove JQuery事件侦听器
- 在JQuery中使用谷歌地图Api事件/侦听器
- 如何在侦听器之后添加可拖动功能
- 为什么on('data')侦听器将两个不同的请求解释为一个,除非添加超时
- 在没有处理程序引用的情况下覆盖侦听器,是否可以访问Ext.data.store上的(可能是私有的)事件属性
- Node.js ReadStream从不调用'data'侦听器