【发布时间】:2019-06-23 13:01:18
【问题描述】:
我被这个问题难住了。我正在尝试将包含文本文件每一行的子字符串的对象推送到 fs linereader 范围之外的数组。我几乎肯定我的数组在正确的范围内,但我的数组总是空的。
代码运行没有任何错误,我什至可以从文本文件中打印出每一行都没问题。
我正在尝试使用 Node 从文本日志文件中获取行并将每行的各个部分推送到数据库。
var watcher = chokidar.watch("MyFolder", {ignored: /^\./, persistent: true});
watcher
.on('add', function(path) {
var myArray = [];
console.log('File', path, 'has been added');
var lineReader = require('readline').createInterface({
input: require('fs').createReadStream(path)
});
lineReader.on('line', function (l) {
l.toString();
myArray.push({
"date" : l.substring(25,35),
"time" : l.substring(35,46)
});
});
console.log(myArray); //Always empty
})
.on('change', function(path) {console.log('File', path, 'has been changed');})
.on('unlink', function(path) {console.log('File', path, 'has been removed');})
.on('error', function(error) {console.log('Error happened', error);});
我希望控制台向我显示数组,但它始终是空的。
【问题讨论】:
-
当然是空的,记住
lineReader.on('line'注册了一个回调函数,将在未来的事件循环中执行,而你的console.log在当前的事件循环中执行。 . 换句话说:你刚刚注册了回调函数,还没有执行...... -
啊!谢谢,我没有在回调中考虑到这一点。是他们异步运行对吗?我想我正确地使用了这个词。我正在玩弄它,但我可以将它包装在 Promise 中吗?