我正在使用使用节点回调约定的节点模块。我想使用Bluebird Promise将此模块转换为API。我没有怎么做。
下面是我的节点样式回调函数。我想将其转换为蓝鸟的可兑现承诺。
var module = require('module'); // for example xml2js, or Mongoose
var parseString = xml2js.parseString;
parseString(xml, function (err, result) { // the regular API
if (err) {
console.log("Error in generation json from xml");
} else {
return result;
}
});
我尝试使用这种方式,PromisifyAll
但无法正常工作:
var module = Promise.promisifyAll(require('module')); // for example xml2js
xml2js.parseString(xml)
.then(function (result) {
console.log("result = ", result);
})
.catch(function (err) {
console.err(err);
});
我遇到了then is not a function
错误。我该如何解决?
当bluebird使用将该模块(例如xml2js)转换为基于Promise的API时,promisifyAll
它将Async
为每个函数名称添加一个后缀,并将该函数添加到该对象中:
var xml2js = Promise.promisifyAll(require('xml2js')); // example: xml2js
xml2js.parseStringAsync(xml) // NOTE THE ASYNC SUFFIX
.then(function (result) {
console.log("result = " + JSON.stringify(result));
})
.catch(function (err) {
console.err(err);
});
当您在parseString
没有异步后缀的情况下调用时,它将调用原始的基于回调的函数。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句