繁体   English   中英

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

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM