簡體   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