我正在创建一个节点模块,我希望能够同时支持节点回调和 Promise API。我听到最好的东西(主要是它最快的)的图书馆是bluebird。因此,在阅读了一些文档并查看了其他一些使用 bluebird 的库之后,我认为这是获得支持节点回调和 Promise API 的方法的最干净的方法:
this.isAllowed = function(role, resource, permission, callback) {
var isAllowedAsync = bluebird.promisify(isAllowed);
return isAllowedAsync(role, resource, permission).nodeify(callback);
};
但是,使用此代码,永远不会执行回调。经过更多研究,我尝试了这个:
this.isAllowed = function(role, resource, permission, callback) {
return new bluebird(function (resolve, reject) {
resolve(isAllowed(role, resource, permission));
}).nodeify(callback);
};
使用该代码,节点回调和 Promise API 都可以工作。
作为参考,这是 isAllowed 方法:
var isAllowed = function(role, resource, permission) {
if(!lists[role] || !lists[role][resource]) {
return false;
}
return lists[role][resource].indexOf(permission) !== -1;
};
我在第一个代码示例中做错了什么,还是第二个示例是获得我正在寻找的东西的真正方法?