readline数据被推入后,数组为空

我正在尝试编写一个程序,我需要从一个文件行逐行读取数据,使用Array.push()将数据逐行存储在一个数组中。 我正在阅读使用readline npm软件包的文件。 但是,当我试图在遍历整个文件后调用数组时,它显示了一个空数组。

 var fs = require('fs'), readline = require('readline'), stream = require('stream'); var instream = fs.createReadStream('sample.txt'); var outstream = new stream; outstream.readable = true; outstream.writable = true; function printArray(ArrayVar){ console.log(ArrayVar); } function AddText(InputStream){ var Text = new Array; var rl = readline.createInterface({ input: instream, output: outstream, terminal: false }); rl.on('line',function(line){ Text.push(line); }); return Text; } var a = AddText(instream); printArray(a); 

我想我有一个问题,因为这个代码的asynchronous执行。 我怎样才能解决这个问题,并按照文本文件中的顺序打印数组的内容?

您需要听取close事件,然后打印arrays。 一旦所有行被读取, close将被调用。

 rl.on('close', function() { console.log(Text) }); 

也,

var Text = new Array;

应该:

var Text = new Array();

要么

var Text = [];

loggingvariables(在你的情况下,它的Text )的值之前,你必须等待行被读取。 您必须等待所有线路通过收听close事件进行阅读,或者在line事件本身做些事情。

你的代码应该如下所示

  var fs = require('fs'), readline = require('readline'), stream = require('stream'); var instream = fs.createReadStream('sample.txt'); var outstream = new stream; outstream.readable = true; outstream.writable = true; function printArray(ArrayVar){ console.log(ArrayVar); } function AddText(InputStream){ var Text = new Array; var rl = readline.createInterface({ input: instream, output: outstream, terminal: false }); rl.on('line',function(line){ Text.push(line); }); rl.on('close', function(){ printArray(Text) }) } var a = AddText(instream); 

另外,您不使用传递给AddText函数的参数InputStream