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

Posted

技术标签:

【中文标题】从 node.js 返回文件的解析输出【英文标题】:Return parsed output of file from node.js 【发布时间】:2012-06-13 00:18:09 【问题描述】:

我的文件已读入并被正确解析,但我似乎无法返回输出字符串。我希望能够从分配给客户端的变量中访问该字符串。我正在使用异步系列来帮助缓解回调地狱,并且输出可以很好地到达控制台。但是,如果我将返回输出放在同一个位置,它就不起作用。有什么建议吗?

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

【问题讨论】:

自带异步域。这简直是​​不可能的。你必须给自己的 API 一个回调参数。 从未听说过callback hell。也从未涉足。只有当您不切换到异步状态并继续尝试同步编程时,您才会进入它。 啊,今天学到了新东西。感谢大家的帮助。 【参考方案1】:

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

【讨论】:

【参考方案2】:

来自异步函数的returning,例如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
);

【讨论】:

以上是关于从 node.js 返回文件的解析输出的主要内容,如果未能解决你的问题,请参考以下文章

Node.js 的设计错误

使用 javascript (Node.js) 规范化 URL

从 PHP 调用 node.js 脚本不返回任何内容

Node.js log4j-like 日志系统

Node.js Buffer(缓冲区)

将“Vanilla”Javascript 库加载到 Node.js 中