[英]Potentially async function return a promise that immediately resolves?
asyncBananaRequest
返回承諾的位置 -
function potentiallyAsync () {
if (cachedBanana) {
return asyncBananaRequest();
}
return ??cachedBanana??;
}
potentiallyAsync().then(function(banana){
//use banana
})
我想要一個香蕉,我可能已經將它緩存了。 有沒有辦法讓我在potentialAsync函數中返回緩存的香蕉作為一個立即用緩存的香蕉解決的承諾?
我目前正在使用Angular中打包的Q lib,但我希望有一個通用的實現
雖然SomeKittens很棒,但他的回答使用了延遲反模式 。
我建議如下:
function potentiallyAsync () {
return (cachedBanana) ? Promise.resolve(cachedBanana) : asyncBananaRequest();
}
potentiallyAsync().then(function(banana){
//use banana
});
在Angular的$ q中,你只使用$q.when(cachedBanana)
而不是ES6標准Promise.resolve
使用完全相同的東西。
這種形式的鏈接和使用.resolve(.when in $ q)來創造新的承諾是承諾的面包和黃油。 在宣傳基於回調的API時,只應在絕對端點使用延遲對象。
當然! 沿着這些線使用模式:
function bananas($q) {
var def = $q.defer();
if (cachedBananas) {
def.resolve(cachedBananas);
} else {
asyncBananas('Monkey.co')
.success(function(bananas) {
def.resolve(bananas);
});
}
return def.promise;
}
與此同時:
function monkey(bananas) {
bananas.then(function(bananas) {
bananas.eat(); // Yum!
});
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.