我有這段代碼是我爲一個名爲Poolio的NPM模塊編寫的小型API的一部分。對於那些支持錯誤優先回調以及承諾的人來說,我的問題似乎是一個常見問題 - 我們如何在維護API和來自API的一致返回值的同時支持這兩個問題?例如,如果我有條件地從我的API返回一個承諾,這取決於我的lib的使用者是否提供回調,在我看來這有點尷尬。在不調用'then'的情況下解析Promise
lib的使用者可以提供回調或使用Promise then功能,但不能同時使用。
這裏是我的lib中導出的功能,我想promisify:
Pool.prototype.any = function (msg, cb) {
var workId = this.counter++;
var self = this;
return new Promise(function (resolve, reject) {
if (typeof cb === 'function') {
self.resolutions.push({
workId: workId,
cb: cb
});
}
else {
self.resolutions.push({
workId: workId,
resolve: resolve,
reject: reject
});
}
if (this.available.length > 0) {
var cp = this.available.shift();
cp.workId = workId;
cp.send(msg);
}
else {
self.msgQueue.push({
workId: workId,
msg: msg
});
}
});
};
我的問題是 - 如果用戶提供原有的功能參數的回調函數,我怎麼能解決的承諾沒有調用'然後'? 對不起,很難解釋,但希望你能理解。
也有這個有趣的問題: Do never resolved promises cause memory leak?
解決的承諾無關用'然後'......一個承諾可以獨立於任何被調用的'then'回調來解決 –
*如果*那麼在promise上調用then,然後從promise中調用resolve應該調用所有附加的then,對吧?換句話說,如果沒有thens,那麼調用resolve就不會有效果,但如果有thens,那麼這些thens應該被調用。我的問題是如何避免打電話給他們。 –
是的,也有任何當時的「附加」的決議後,將被稱爲「立即」(在引號中,因爲它不是明確的剪切) –