Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.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脚本文件代码的行为与节点中的命令不同_Javascript_Node.js_Readline - Fatal编程技术网

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

Javascript脚本文件代码的行为与节点中的命令不同,javascript,node.js,readline,Javascript,Node.js,Readline,我已经创建了一个脚本(块1),但它无法将任何内容导入到我的数组中。如果我获取代码并在命令行节点中逐行执行(第2块),它就可以正常工作 第1区: var fs = require('fs'); var readline = require('readline'); var filename = process.argv[2];//filename var content = []; console.log(filename); readline.createInterface({ inpu

我已经创建了一个脚本(块1),但它无法将任何内容导入到我的数组中。如果我获取代码并在命令行节点中逐行执行(第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:(按顺序输入的每一行)

块1中的
console.log(文件名)
打印出正确的名称,但是
console.log(content.length)
打印“0”,其中与节点REPL内容一样,有1700个以上的条目

我在linux环境中使用NodeV6.9.4,并在同一台计算机上执行这两个块。 我是不是漏掉了什么明显的东西


谢谢

当您使用
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可用。但是,当在浏览器内存中执行时,引擎在接口读取完输入之前到达该行。

因为您在控制台中键入了内容,所以无意中为异步操作提供了足够的时间来完成,而在执行文件中的代码行时则不然。
readline.createInterface({
    input: fs.createReadStream(filename),
    terminal: false
}).on('line', function (line) {
   content.push(line);
}).on('close', function(){
  console.log(content.length);
})