从node.js返回文件的解析输出

时间:2012-06-09 00:01:23

标签: javascript node.js asynchronous express fs

我的文件读入并正确解析但我似乎无法返回输出字符串。我希望能够从它在客户端上分配的变量访问此字符串。我正在使用异步系列来帮助减轻回调地狱,输出对控制台很好。但是,如果我将返回输出放在同一位置,则它不起作用。建议?

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

2 个答案:

答案 0 :(得分:3)

来自异步函数的

return,如async.series的回调,并不意味着什么。您需要将回调传递给main函数,并使用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 :(得分:1)

它是异步的,你不能从异步函数返回一些东西。您必须接受在操作完成时调用的回调。 Brandon Tilley有正确的代码来做到这一点。