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
。