Javascript脚本文件代码的行为与节点中的命令不同

时间:2017-07-28 17:37:13

标签: javascript node.js readline

我创建了一个脚本(块1),但无法将anythign导入到我的数组中。如果我接受代码并在命令行节点中逐行执行它(块2)它可以正常工作

第1区:

var fs = require('fs');
var readline = require('readline');
var filename = process.argv[2];//filename
var content = [];
console.log(filename);
readline.createInterface({
    input: fs.createReadStream(filename),
    terminal: false
}).on('line', function (line) {
   content.push(line);
});
console.log(content.length);

第2栏:(每行依次输入)

fs = require('fs');

readline = require('readline');

filename = "filename.txt";

content = [];

readline.createInterface({
    input: fs.createReadStream(filename),
    terminal: false
}).on('line', function (line) {
   content.push(line);
});

content;

块1中的console.log(filename)打印出正确的名称,但console.log(content.length)打印“0”,其中节点REPL内容中有超过1700个条目。

我在linux环境中使用node v6.9.4,并在同一台计算机上执行这两个块。 我错过了一些明显的东西吗?

谢谢

1 个答案:

答案 0 :(得分:1)

使用close事件

时,您可以获得预期的输出
readline.createInterface({
    input: fs.createReadStream(filename),
    terminal: false
}).on('line', function (line) {
   content.push(line);
}).on('close', function(){
  console.log(content.length);
})

当您输入节点shell时,您的文件输入流在您输入下一行所用的时间间隔内完成,因此content.length可用。但是,当在浏览器内存中执行时,引擎会在输入完成接口读取之前到达该行。