我对从readline on()
方法中看到的一些简单行为感到困惑。
我有一个名为的文件small.csv
,看起来像这样:
Date,Close
2015-11-12,2045.97
2015-11-11,2075.00
2015-11-10,2081.72
2015-11-09,2078.58
我写了这个脚本:
my.js
var rl = require('readline').createInterface({
input: require('fs').createReadStream('small.csv')
});
global.myarray = [];
rl.on('line', function (line) {
console.log('Line from file:', line);
global.myarray.push(line);
});
console.log(global.myarray);
// done
脚本输出:
dan@nia111:~/d1d2p $
dan@nia111:~/d1d2p $ node -v
v5.0.0
dan@nia111:~/d1d2p $
dan@nia111:~/d1d2p $
dan@nia111:~/d1d2p $ node my.js
[]
Line from file: Date,Close
Line from file: 2015-11-12,2045.97
Line from file: 2015-11-11,2075.00
Line from file: 2015-11-10,2081.72
Line from file: 2015-11-09,2078.58
dan@nia111:~/d1d2p $
dan@nia111:~/d1d2p $
我想增强脚本,使其充满global.myarray
而不是空着。
当我使用逐步浏览脚本时node-debug
,似乎global.myarray
正在填充,但我认为这是一种幻想。
另外,当我运行node my.js
时,console.log(global.myarray);
在small.csv
读取之前运行。
因此,我可能需要在这里了解一些异步机制。
对于那些了解readline
得很好的人,以下问题可能很容易。
但是,我很乐意得到这个问题的答案:
如何增强my.js
使其填充global.myarray
而不是将其留空?
由于它的异步特性,Node.js在这种情况下可能会有些棘手。这意味着当您的代码正在执行时,它将触发rl.on('line')
处理程序并传递到下一个调用(在本例中为)console.log
。实际代码中的问题不是数组未填满,而是您希望将其填充到早期。这是如何解决问题的示例:
var rl = require('readline').createInterface({
input: require('fs').createReadStream('small.csv')
});
global.myarray = [];
rl.on('line', function (line) {
console.log('Line from file:', line);
global.myarray.push(line);
});
rl.on('close', function () {
console.log(global.myarray);
});
在这段代码中,当不再需要读取任何行时,console.log
将调用,并且将显示一些数据。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句