我有以下代码:
var lineReader = require('readline').createInterface({
input: require('fs').createReadStream('graph.txt')
});
var graph = {};
lineReader.on('line', function (line) {
var spl = line.split('\t');
graph[spl[0]] = spl.slice(1);
});
console.log(graph);
graph.txt
包含表示邻接列表中的图表的数据,例如
1 3 2 3
2 1 3
3 1 2 1
我用node script.js
运行了代码。我不明白为什么最后graph
仍然是一个空对象。将数据读入对象的正确方法是什么?
答案 0 :(得分:2)
尝试将console.log(graph);
来电替换为:
lineReader.on('close', function () {
console.log(graph);
});
您看到空对象,因为您的log
在读取文件之前发生,因为读数为async
。
答案 1 :(得分:1)
您所拥有的是一些异步代码,您希望它们可以完全同步调用。首先,打开文件,然后读取(异步)单行,对于每一行,您的单独回调函数(lineReader.on('line', func);
)将被异步调用,但到目前为止发生的一切都是事件已注册。然后,(在您的回调甚至执行一次之前),您记录图表。
您需要做的就是为读者的末尾添加一个eventlistener,它应该是这样的:
lineReader.on('close', function() {
console.log(graph);
}
请注意,我自己没有使用过这些功能,但这就是我的问题所在。如果有效,请告诉我!