Javascript脚本文件代码的行为与节点中的命令不同
我已经创建了一个脚本(块1),但它无法将任何内容导入到我的数组中。如果我获取代码并在命令行节点中逐行执行(第2块),它就可以正常工作 第1区: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
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);
})