2012-06-09 53 views
1

我有我的文件读入和正确解析,但我似乎无法返回输出字符串。我希望能够从它分配给客户端的变量中访问此字符串。我正在使用异步系列来帮助缓解回调地狱,并输出击中控制台罚款。但是,如果我在同一个地点放弃返回输出,它不起作用。建议?从node.js返回文件解析输出

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);  
     } 
    ); 
} 
+0

附带异步领域。这根本不可能。你必须给你自己的API一个回调参数。 – Pointy

+0

从来没有听说过'回调地狱'。从来没有陷入过。如果不切换到异步状态并不断尝试同步编程,则只能进入它。 –

+0

啊,今天学到了新东西。感谢大家的帮助。 – codeisforeva

回答

3

return从一个异步功能,如回调async.series ING,并不意味着什么。你需要一个回调进入的主要功能,并与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);  
     } 
    ); 
} 

,然后用它,就像任何其他异步功能:

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

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