1

ファイルを読み込んで適切に解析していますが、出力の文字列を返すことができないようです。クライアントで割り当てられる変数からこの文字列にアクセスできるようにしたいと思います。私は非同期シリーズを使用して、コールバック地獄を緩和し、出力がコンソールに正常にヒットします。ただし、リターン出力を同じ場所にドロップすると、機能しません。提案?

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

2 に答える 2

3

returnのコールバックのような非同期関数からの ing は、async.series何の意味もありません。コールバックをメイン関数に渡し、次のように呼び出す必要があります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
});
于 2012-06-09T00:06:04.687 に答える
1

非同期です。非同期関数から何かを返すことはできません。操作が完了したときに呼び出されるコールバックを受け入れる必要があります。Brandon Tilley はそれを行うための正しいコードを持っています。

于 2012-06-09T00:06:12.003 に答える