我想重构一些节点代码,这是一个回调的整个混乱。我认为这将是很好的承诺试试这个目的。我试图用xml2js
节点模块将一些xml字符串转换为json。原来的代码是:promisifying xml2js解析函数(ES6承诺)
"use strict";
var xml2jsParser = require('xml2js').parseString;
var string = "<container><tag3>option3</tag3></container>";
xml2jsParser(string, function(err, result)
{
console.log(result);
});
,这显示:
{ container: { tag1: [ 'option1' ], tag2: [ 'option2' ], tag3: [ 'option3' ] } }
继在这个问题上How do I convert an existing callback API to promises?第一个回答我试着换用承诺按以下方式xml2jsParser功能:
"use strict";
var xml2jsParser = require('xml2js').parseString;
function promisesParser(string)
{
return new Promise(function(resolve, reject)
{
xml2jsParser(string, resolve);
});
}
var string = "<container><tag3>option3</tag3></container>";
promisesParser(string).then(function(err, result){
console.log(result);
});
按预期方式通过控制台而不是json对象显示undefined
。我不明白为什么会发生这种情况,因为我能够成功地完成其他功能。我知道Bluebird promisify功能可以实现类似的功能,但是我希望在没有任何第三方库的情况下以纯Javascript执行此操作。
从该答案中使用#3“节点样式回调”而不是#2“普通回调”。 – Bergi