在Node.js中将json数据读入全局variables

我想读一个JSON结构到一个全局variables,但似乎无法得到它的工作。 我从文件中读取一个callback进行处理(该部分正在工作)。

我想要“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); 

请记住, readFileasynchronous的 。 最后一行console.log(source_files)调用readFilecallback之前运行,因此在readConfigcallback被调用之前运行。 您需要将其移入 readConfigcallback。

用你的代码,是这样的:

  1. 它创build空白数组。
  2. 它调用readConfig
  3. readConfig调用readFile
  4. readFile 启动asynchronous读操作并返回。
  5. readConfig返回。
  6. 您loggingsource_files ,它是空的。
  7. 稍后, readFile操作结束,并调用callback。 它调用readConfigcallback。
  8. readConfigcallback会填充source_files ,但是就像没有任何东西可以观察到的那样,它就像是一棵树在森林中的那一点。 🙂

如前所述, readFile是asynchronous的。 如果这只是启动初始化代码(即不要紧,如果它阻止),你可以使用readFileSync来代替(抛出err或返回content )。

但是,如果readConfig也可以被调用以响应稍后的input(例如POSIX信号或TCP请求),那么您必须保持asynchronous或阻止其他I / O。