Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/469.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript NodeJS-读取行暂停和恢复事件发射器(逐行读取)_Javascript_Node.js - Fatal编程技术网

Javascript NodeJS-读取行暂停和恢复事件发射器(逐行读取)

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

我正在使用节点v.0.8.9及其模块
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();