潜在的异步函数会返回一个立即解析的承诺吗?

Che*_*aks 2 javascript promise

asyncBananaRequest返回一个承诺-

function potentiallyAsync () {
  if (cachedBanana) {
    return asyncBananaRequest();
  }
  return ??cachedBanana??;
}

potentiallyAsync().then(function(banana){
  //use banana
})
Run Code Online (Sandbox Code Playgroud)

我想要一个香蕉,我可能已经将它缓存了.有没有办法让我在potentialAsync函数中返回缓存的香蕉作为一个立即用缓存的香蕉解决的承诺?

我目前正在使用Angular中打包的Q lib,但我希望有一个通用的实现

Ben*_*aum 8

虽然SomeKittens很棒,但他的回答使用了延迟反模式.

我建议如下:

function potentiallyAsync () {
  return (cachedBanana) ? Promise.resolve(cachedBanana) : asyncBananaRequest();
}

potentiallyAsync().then(function(banana){
  //use banana
});
Run Code Online (Sandbox Code Playgroud)

在Angular的$ q中,你只使用完全相同的东西$q.when(cachedBanana)而不是ES6标准Promise.resolve.

这种形式的链接和使用.resolve(.when in $ q)来创造新的承诺是承诺的面包和黄油.在宣传基于回调的API时,只应在绝对端点使用延迟对象.