javascript读取数据导致空对象

时间:2016-07-25 21:27:13

标签: javascript node.js

我有以下代码:

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仍然是一个空对象。将数据读入对象的正确方法是什么?

2 个答案:

答案 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);
}

请注意,我自己没有使用过这些功能,但这就是我的问题所在。如果有效,请告诉我!