【问题标题】:xml2js: put parser into a functionxml2js:将解析器放入函数中
【发布时间】:2014-10-21 00:49:12
【问题描述】:

我在我的 NodeJS 服务器上得到了这段代码:

function GetXML() {
    fs.readFile('../slideshow.xml.old', function(err, data) {
        parser.parseString(data, function (err, result) {
            var json = JSON.stringify(result);
            console.log(json);
            return json;
        });
    });
}

console.log() 运行良好,但事实并非如此:

.get('/', function(req, res) {
    res.end(GetXML());
};

它返回undefined,这很符合逻辑,因为函数是嵌套的(我认为?)。但我不知道如何让 GetXML() 返回一个值。

【问题讨论】:

    标签: json node.js nested-function


    【解决方案1】:

    “GetXML”没有返回值。可以改成:

    function GetXML() {
        return fs.readFile('../slideshow.xml.old', function(err, data) {
            parser.parseString(data, function (err, result) {
                var json = JSON.stringify(result);
                console.log(json);
                return json;
            });
        });
    }
    

    【讨论】:

    • 很抱歉,您的解决方案不起作用 :( console_log(json) 正在运行,但函数仍在返回 undefined
    【解决方案2】:

    它返回undefined,因为您正在尝试同步执行一个异步任务。您必须将回调传递给您的 GetXML() 函数,例如:

    function GetXML(cb) {
      fs.readFile('../slideshow.xml.old', function(err, data) {
        parser.parseString(data, function (err, result) {
          var json = JSON.stringify(result);
          cb(json);
        });
      });
    }
    

    ,并在您的 .get 函数中正确调用它:

    .get('/', function(req, res) {
      GetXML(function (json) {
        res.end(json);
      });
    };
    

    您应该查看 this article,它解释了 callbacks 在 node.js 中的工作原理。

    【讨论】:

      猜你喜欢
      • 2018-08-17
      • 2016-06-15
      • 2018-10-31
      • 2020-12-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-15
      • 2017-09-04
      相关资源
      最近更新 更多