如何在Javascript node.js中同步运行parseString()函数

时间:2015-11-20 01:52:15

标签: javascript node.js

我有这段代码,我运行parseString()从xml文件中提取一些信息

function parseTime(){

var parser = new xml2js.Parser();
var data = fs.readFileSync('C:\\Temp\\tasks\\acis\\110-1100.sat\\110-1100.sat.response.xml', {encoding:'utf8'});

parser.parseString(data, function (err, result) {

var timeString = result.Message.Response[0].Events[0].MessageReportEvent[8].$.Message;
var fileTime = timeString.substr(13,20);
var filetimeVal = parseFloat(fileTime);

console.log(filetimeVal);

return filetimeVal;

});

};

我应该做什么更改才能同步运行parseString,或者有办法通过不同的同步方法提取xml数据

2 个答案:

答案 0 :(得分:0)

parseString的回调已经同步运行。您的程序将在到达任何其他代码行之前到达已解析的结果。

默认情况下,async次切换为false

然而,开发人员警告说,此默认值可能会在未来发生变化。

  

async(默认为false):回调应该是异步吗?这可能是一个   如果您的代码依赖于同步执行,则会发生不兼容的更改   回调。 xml2js的未来版本可能会更改此默认值,因此   建议不要依赖于同步执行。添加   0.2.6。

答案 1 :(得分:-1)

您可以使用bluebird来宣传它。在被宣判之后,带回调的原始函数将成为允许您执行此操作的Promise:

parser.parseStringAsync(data)
.then(doYourThingHere)

function doYourThingHere(result) {
}