从node.js返回文件的parsing输出

我有我的文件阅读和正确parsing,但我似乎无法返回输出string。 我希望能够从它分配给客户端的variables中访问此string。 我正在使用asynchronous系列来帮助缓解callback地狱和输出击中控制台罚款。 但是,如果我在相同的地点下降返回输出,它不起作用。 build议?

embed_analytics: function(){ var output; async.series({ read_file: function(callback){ fs.readFile(__rootpath+'/apps/analytics/data/analytics.json', 'UTF-8', function(err,data){ if(err) { console.error("Could not open file: %s", err); process.exit(1); } try { var config = JSON.parse(data); callback(null, config); } catch(exception) { console.error("There was an error parsing the json config file: ", exception); process.exit(1); } }); } }, function(err, results) { _.each(results.read_file, function(element){ output+="$('"+element.Selector+"').click(function(){_gaq.push(['_trackEvent',"+element.Category+","+element.Action+","+element.Label+"]);});\n"; }); console.log(output); } ); } 

从asynchronous函数return ,就像async.series的callbackasync.series ,没有任何意义。 您需要将callback传递给主函数,并使用output调用它:

 embed_analytics: function(final_callback){ ... }, function(err, results) { _.each(results.read_file, function(element){ output+="$('"+element.Selector+"').click(function(){_gaq.push(['_trackEvent',"+element.Category+","+element.Action+","+element.Label+"]);});\n"; }); final_callback(output); } ); } 

然后像使用其他asynchronous函数一样使用它:

 embed_analytics(function(data) { // do something with data }); 

它是asynchronous的,你不能从asynchronous函数中返回一些东西。 您必须接受在操作完成时被调用的callback。 布兰登蒂利有正确的代码来做到这一点。