节点,从JSON文件读取返回一个空数组

时间:2016-05-19 15:49:50

标签: javascript json node.js

function readTextFile(filename, callback){
    var fs = require('fs');
    fs.readFile(filename, 'utf8', function(err, data){
        if(err){
            throw err;
        }else{
            callback(data);
        }
    });
}

var set1 = [];
var set2 = [];
var set3 = [];
var set4 = [];
var set5 = [];

readTextFile("./data/names.json", function(text){
    var names = JSON.parse(text);
    set1 = names.prop1.prop2;
    set2 = names.prop1.prop3;
    set3 = names.prop1.prop4;
    set4 = names.prop5.prop2;
    set5 = names.prop5.prop3;
});
console.log(set1);

运行此部分代码,使用"节点jsonRead.js"为console.log()中调用的任何数组返回[]。这段代码过去大约有80%的时间都在使用,但现在它根本不起作用,我不知道为什么。如果能让它再次运作,我将不胜感激。

2 个答案:

答案 0 :(得分:1)

也许读取过程仍在继续。

尝试回调中的readTextFile("./data/names.json", function(text){ var names = JSON.parse(text); set1 = names.prop1.prop2; set2 = names.prop1.prop3; set3 = names.prop1.prop4; set4 = names.prop5.prop2; set5 = names.prop5.prop3; console.log(set1); });

readTextFile

这导致读取完成后执行q的回调函数,而其他代码按写入执行。

您可以使用Promises解决此问题。查看GridLines="None"库,例如:https://github.com/kriskowal/q

答案 1 :(得分:1)

执行代码的Node.js范例是异步的,意味着它将在调用异步方法后执行下一行代码。在上面的示例中,调用了readTextFile,执行将继续到下一行。它不会等待回归。