我正在創建一個節點模塊,我希望能夠支持節點回調和Promise API。我聽到最好的東西(主要是它是最快的)的圖書館是bluebird。所以,閱讀一些文檔和查看正在使用的藍鳥一些其他庫後,我認爲這將是獲得一種方法來支持節點的回調,並承諾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;
};
我做得不對的第一個代碼示例或第二個例子中得到什麼我尋找的真正的方法是什麼?
'isAllowed'是一個同步函數,這樣做沒有意義 – Esailija