分享承诺(在Redux状态.)

Dav*_*vid 7 javascript redux

我有一个依赖于从异步操作(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;
}
Run Code Online (Sandbox Code Playgroud)

vsy*_*ync 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
Run Code Online (Sandbox Code Playgroud)