【问题标题】:Assigning value to a global variable inside a callback function and returning it [Node.js]在回调函数中为全局变量赋值并返回它[Node.js]
【发布时间】:2013-05-27 06:57:16
【问题描述】:

我有一个带有联赛的 xml 文件,xml 树的下一个节点如此之多,但我只想返回每个联赛的 id 和名称,我使用的是 xml-object-stream 节点模块,可以在 @ 找到987654321@.

xml = require('xml-object-stream'),
fs = require('fs');

function buildLeagues(cb){
    var leaguesData = [];
    var data = fs.createReadStream("./tmp/leagues.xml");
    var parser = xml.parse(data);

    var parser.each('league', function(league){
       var leagues = {};
       leagues.id = league.$.id ;
       leagues.name = league.$text;
       leaguesData.push(leagues);

   });

  cb(JSON.stringify(leaguesData));

}

这个函数的问题在于 javascript 作用域; leaguesData 变量总是返回 [] 因为回调函数中的新范围,我什至尝试在全局范围内声明它,但同样的问题,谁能建议一个更好的方法来构建我的 json 数据批量xml 文件。 谢谢

【问题讨论】:

    标签: javascript json node.js xml-parsing callback


    【解决方案1】:

    来自文档:

    解析器发出一些流式事件

    parser.on 'end', ->
    parser.on 'error', (err) ->
    parser.on 'close', ->
    

    这意味着您应该在事件流完成并且您的 leaguesData 数组包含所有结果时触发回调。所以试试

    var xml = require('xml-object-stream'),
    var fs = require('fs');
    
    function buildLeagues(cb){
        var leaguesData = [];
        var data = fs.createReadStream("./tmp/leagues.xml");
        var parser = xml.parse(data);
    
        parser.each('league', function(league){
            leaguesData.push({
                id: league.$.id,
                name: league.$text
            });
        });
        parser.on("end", function() {
            cb(null, JSON.stringify(leaguesData)); // are you sure you need to stringify?
        });
        parser.on("err", function(err) {
            cb(err, leaguesData);
        });
    }
    

    【讨论】:

    • 非常感谢Bergi,是的,你说得对,我不需要JSON.stringify
    猜你喜欢
    • 1970-01-01
    • 2020-09-11
    • 1970-01-01
    • 2021-09-18
    • 1970-01-01
    • 1970-01-01
    • 2018-10-10
    • 2020-01-16
    • 2012-09-08
    相关资源
    最近更新 更多