Javascript 潜在异步函数返回一个立即解决的承诺?
其中Javascript 潜在异步函数返回一个立即解决的承诺?,javascript,promise,Javascript,Promise,其中asyncbanarequest返回一个承诺- function potentiallyAsync () { if (cachedBanana) { return asyncBananaRequest(); } return ??cachedBanana??; } potentiallyAsync().then(function(banana){ //use banana }) 我想要一个香蕉,我可能已经把它缓存起来了。有没有一种方法可以让我将缓存的香蕉返回到潜在
asyncbanarequest
返回一个承诺-
function potentiallyAsync () {
if (cachedBanana) {
return asyncBananaRequest();
}
return ??cachedBanana??;
}
potentiallyAsync().then(function(banana){
//use banana
})
我想要一个香蕉,我可能已经把它缓存起来了。有没有一种方法可以让我将缓存的香蕉返回到潜在的同步功能中,这是一种立即解决缓存香蕉问题的承诺
我目前正在使用Angular中打包的Q库,但我希望有一个通用的实现当然!使用以下线条的图案:
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!
});
}
虽然有些小猫很可怕,但他的回答使用了 我建议如下:
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发出通知时在绝对端点使用。同样重要的是,AsyncBanaRequest不能同步抛出。另请参阅