我正在使用一个使用节点回调约定的节点模块.我想使用Bluebird承诺将此模块转换为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); });
当蓝鸟使用promisifyAll将模块(如xml2js)转换为基于promise的API时,它会为每个函数名称附加一个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); });