无法获得正确的返回对象。

时间:2016-03-07 20:39:24

标签: javascript angularjs promise

serviceApp.factory('xml2json', function() {

return {
Convert: function(path) {
  var fs = require('fs');
  var xml2js = require('xml2js');
  var parser = new xml2js.Parser();
  var json;

    fs.readFile(path, function(err, data) {
      parser.parseString(data, function(err, result) {
        json = result.object.property[9].steps[0].object[27].property[1].property[0].object;
        console.log(json);
      });
    });
    console.log(json + '1');
    return json;
  }
}
});

这是我的服务^^无论出于何种原因,第一个控制台日志都可以正常工作。第二个是未定义的。当我返回json时,它返回undefined。我试过计时器,我已经尝试过承诺,我已经尝试过回调。我不知道如何使它返回parser.parseString();请帮忙。

serviceApp.controller('PPQACtrl', function($scope, SqlConFactory, CreateRequest, EmailService, xml2json) {
    var path = '/some/path/to/file.xml'
    var myjson = xml2json.Convert(path);
    console.log(myjson);


});

1 个答案:

答案 0 :(得分:0)

由于调用是异步的 - 您可以使用promise或callback来返回数据。以下是使用回调重构代码的示例:

服务:

serviceApp.factory('xml2json', function() {
    return {
        Convert: function(path, callback) {
            var fs = require('fs');
            var xml2js = require('xml2js');
            var parser = new xml2js.Parser();
            var json;

            fs.readFile(path, function(err, data) {
                parser.parseString(data, function(err, result) {
                    json = result.object.property[9].steps[0].object[27].property[1].property[0].object;
                    callback(json);
                });
            });
        }
    }
});

用法:

xml2json.Convert(path, function(json) {
    console.log(json);
});