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%的时间都在使用,但现在它根本不起作用,我不知道为什么。如果能让它再次运作,我将不胜感激。
答案 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,执行将继续到下一行。它不会等待回归。