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