[英]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.