首页 文章

分享承诺(在Redux状态 . )

提问于
浏览
5

我有一个依赖于从异步操作(API提取)解析的Promise的函数 .

异步操作需要返回Fetch promise,或者返回在Fetch完成时解析的promise .

但是,Fetch应该只发生一次 .

我可以将fetch promise存储在一个全局变量中,然后返回它,但这是Redux中的反模式吗? Promise应该在Redux商店中,因为它是应用程序状态的一部分吗?

示例代码:

//Should this be in Redux Store?
var promise = null;

myfunction() {
  doAsyncTask().then(() => {
    //Continue
  });
}

doAsyncTask() {
  if(promise === null) {
    promise = fetch('URI');
  }
  return promise;
}

1 回答

  • 0

    这是一个缓存promise的简单方法,或者基本上是函数产生的任何计算,所以当再次调用该函数时(第一次之后),它将返回最后一个计算值,在下面的情况下总是**相同*承诺(已解决或待决) .

    根据您的特定需求,您可以使用fetch替换Promise并将其存储在 cache 变量中 .

    function myfunction(){
      doAsyncTask().then(RES => {
        console.log(RES);
      });
    }
    
    const doAsyncTask = (cache => {
      return function(){
        // when called first time, put the promise in the "cache" variable
        if( !cache ){
            cache = new Promise(function(resolve, reject){
                setTimeout(() => {
                    resolve('foo');
                }, 2000);
            });
        }
        return cache;
      }
    })();
    
    myfunction(); 
    myfunction(); // second call uses the exact same promise
    

相关问题