Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从node.js返回文件的解析输出_Javascript_Node.js_Asynchronous_Express_Fs - Fatal编程技术网

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

Javascript 从node.js返回文件的解析输出,javascript,node.js,asynchronous,express,fs,Javascript,Node.js,Asynchronous,Express,Fs,我已将文件读入并正确解析,但似乎无法返回输出字符串。我希望能够从客户机上分配给它的变量访问这个字符串。我使用async series来帮助减轻回调地狱,并且输出可以很好地命中控制台。然而,如果我把返回输出放在同一个位置,它就不工作了。建议 embed_analytics: function(){ var output; async.series({ read_file: function(callback){ fs.read

我已将文件读入并正确解析,但似乎无法返回输出字符串。我希望能够从客户机上分配给它的变量访问这个字符串。我使用async series来帮助减轻回调地狱,并且输出可以很好地命中控制台。然而,如果我把返回输出放在同一个位置,它就不工作了。建议

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
的回调,并不意味着什么。您需要将回调传递给main函数,并使用
输出调用它:

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

return
从异步函数调用,比如
async.series
的回调,并不意味着什么。您需要将回调传递给main函数,并使用
输出调用它:

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有正确的代码来做这件事。

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

附带异步区域。这根本不可能。你必须给你自己的API一个回调参数。从没听说过回调地狱。也从来没有参与过。只有当你不切换到一种非同步的思维状态并不断尝试同步编程时,你才能进入它。啊,今天我们学到了一些新东西。谢谢大家的帮助。随附异步领域。这根本不可能。你必须给你自己的API一个回调参数。从没听说过回调地狱。也从来没有参与过。只有当你不切换到一种非同步的思维状态并不断尝试同步编程时,你才能进入它。啊,今天我们学到了一些新东西。谢谢大家的帮助。