Javascript NodeJS-读取行暂停和恢复事件发射器(逐行读取)
我正在使用节点v.0.8.9及其模块Javascript NodeJS-读取行暂停和恢复事件发射器(逐行读取),javascript,node.js,Javascript,Node.js,我正在使用节点v.0.8.9及其模块readline。我无法使用fs.readFile(),因为我得到了EISDIR错误 我想从文件中逐行阅读,做一些工作,然后(当工作完成时)才阅读下一行。因此,我尝试了下面的代码片段(见下文),但在使用一些同步工作更改的时,它的行为并不同步 var fs = require('fs'); var readline = require("readline"); var filename = process.argv[2]; readline.createInt
readline
。我无法使用fs.readFile()
,因为我得到了EISDIR
错误
我想从文件中逐行阅读,做一些工作,然后(当工作完成时)才阅读下一行。因此,我尝试了下面的代码片段(见下文),但在使用一些同步工作更改的时,它的行为并不同步
var fs = require('fs');
var readline = require("readline");
var filename = process.argv[2];
readline.createInterface({
input: fs.createReadStream(filename),
terminal: false
}).on("line", function(line){
this.emit("pause", line);
}).on("pause", function(line) {
console.log("pause");
console.log(line);
console.log("doing some work");
for (var i = 0; i < 1000000000; ++i);
this.emit("resume");
}).on("resume", function() {
console.log("resume");
}).on("close", function() {
console.log("close");
});
var fs=require('fs');
var readline=需要(“readline”);
var filename=process.argv[2];
readline.createInterface({
输入:fs.createReadStream(文件名),
终端:错误
}).on(“线路”,功能(线路){
这个。发射(“暂停”,行);
}).打开(“暂停”,功能(行){
控制台日志(“暂停”);
控制台日志(行);
log(“做一些工作”);
对于(var i=0;i<100000000;++i);
本.发出(“恢复”);
}).on(“恢复”,函数(){
控制台日志(“恢复”);
}).on(“关闭”,函数(){
控制台日志(“关闭”);
});
有人能解释一下这个问题吗?只是一种预感。。。。尝试实际调用pause()
,而不是发出pause
事件
即改变:
this.emit("pause", line);
到
让我知道这是否有效。虽然逐行读取文件是很常见的,但NodeJS没有支持如此大文件的实现。因此,您需要使用缓冲区来实现它
这里有一个很好的方法-错误表明您正试图从目录中读取。@IoannisKaradimas,没有。我已经核实过了。这是因为文件太大。您应该更新反映这一点的问题,以避免类似于我的评论的回答。此外,如果您指出文件的大小也很好,以防它是基于操作系统的限制或类似的限制。首先,我不能使用它,因为我必须传递一个参数。但是,即使我解决了参数问题,它的行为方式也是一样的。我不同意:-)node的readline
模块有两种方法,在处理大文件时非常有用:暂停
和恢复
。如果您不想自己调用它们,可以使用缓冲数据接收器:。它缓冲数据,并在队列已满时暂停读取器。您只需要设置缓冲区大小和队列限制。
this.pause();