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

NodeJS - readline pause and resume event emitter (read line by line)

本文关键字:逐行 读取 发射器 事件 暂停 恢复 NodeJS-readline      更新时间:2023-09-26

我使用的是Node v.0.8.9及其模块readline。由于出现EISDIR错误,我无法使用fs.readFile()

我想从文件中逐行读取,做一些工作,然后(当工作完成时)才能读取下一行。因此,我尝试了以下片段(见下文),但当使用一些同步工作更改for时,它的行为并不同步。

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");
});

有人能阐明这个问题吗?

虽然从文件中逐行读取是很常见的,但NodeJS没有支持这种大文件的实现。因此,您需要使用缓冲区来实现它。

这里有一个效果很好——http://blog.jaeckel.com/2010/03/i-tried-to-find-example-on-using-node.html

只是一种预感。。。。尝试实际调用pause(),而不是发出pause事件。

也就是说,改变:

this.emit("pause", line);

到。。。

this.pause();

让我知道这是否有效。