我有一个依赖于从异步操作(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)
这是一个简单的方法,用于缓存 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 promiseRun Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
749 次 |
| 最近记录: |