我正在尝试将json结构读入全局变量,但似乎无法使其工作。一旦从文件中读取(该部分正在工作),我正在使用回调进行处理。
我想填充“source_files”。
var fs = require('fs');
var source_files = [];
function readConfig(callback) {
fs.readFile('data.json', 'utf-8', function (err, content) {
if (err) return callback(err);
callback(content);
});
}
readConfig(function(config) {
var settings = JSON.parse(config);
var inputs = settings.inputs;
for (var id=0; id < inputs.length; id++) {
source_files.push(inputs[id].replace('./',''));
}
});
console.log(source_files);
答案 0 :(得分:5)
请记住readFile
is asynchronous。您的最后一行console.log(source_files)
将在调用readFile
回调之前运行,因此在调用readConfig
回调之前。您需要将移动到 readConfig
回调中。
使用您的代码,这是发生的事情:
readConfig
。readConfig
来电readFile
。readFile
启动异步读取操作并返回。readConfig
返回。source_files
,这是空的。readFile
操作完成并调用回调。它调用readConfig
回调。readConfig
回调填充source_files
,但它有点像落在森林中的树,因为没有观察到。 : - )答案 1 :(得分:2)
如前所述,readFile
是异步的。如果这只是启动初始化代码(即,如果它阻止则无关紧要),您可以改为使用readFileSync
(抛出err
或返回content
)。
但是,如果还可以调用readConfig
以响应稍后的输入(例如POSIX信号或TCP请求),那么您必须保持其异步或冒险阻止其他I / O.