我使用的是Node v.0.8.9及其模块readline
。由于我收到fs.readFile()
错误,我无法使用EISDIR
。
我想从文件中逐行阅读,做一些工作,然后(当工作完成时)阅读下一行。因此,我尝试了以下代码段(见下文),但在使用某些同步工作更改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");
});
有人可以解释这个问题吗?
答案 0 :(得分:2)
虽然从文件中逐行读取是很常见的,但NodeJS没有支持这些大文件的实现。因此,您需要使用缓冲区来实现它。
这是一个效果很好的作品 - http://blog.jaeckel.com/2010/03/i-tried-to-find-example-on-using-node.html
答案 1 :(得分:0)
只是预感....尝试实际调用pause()
而不是发出pause
事件。
即改变:
this.emit("pause", line);
为...
this.pause();
让我知道这是否有效。