簡體   English   中英

從node.js返回文件的解析輸出

[英]Return parsed output of file from 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);     
        }
    );
}

從異步函數return ,就像async.series的回調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
});

它是異步的,你不能從異步函數返回一些東西。 您必須接受在操作完成時調用的回調。 Brandon Tilley有正確的代碼來做到這一點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM