【发布时间】:2017-01-01 23:16:08
【问题描述】:
我有一个函数依赖于从异步操作(API 获取)中解析的 Promise。
异步操作需要返回 Fetch 承诺,或者返回在 Fetch 完成时解析的承诺。
但是,Fetch 应该只发生一次。
我可以将 fetch 承诺存储在一个全局变量中,然后返回它,但这是 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;
}
【问题讨论】:
-
你不需要知道。在第一次调用函数时缓存 promise,并始终返回缓存的 promise。顺便提一句。为什么你需要延迟调用
fetch('URI')(doAsyncTask())?为什么不首先调用它,保存 promise 并使用它而不是调用 doAsyncTask()? -
感谢您的回复,isFetching 标志在 Redux Store 中,您是否也将 Promise 存储在其中?
-
不知道我对 redux 几乎没有经验。想到两个问题:它是什么样的商店?它可以处理承诺,还是需要可序列化的数据?第二个想法:你需要这个承诺多久?那是在这段时间内存储数据的正确位置吗?例如,如果它是一个全局存储,并且您只需要一个模块的承诺,那么可能会有一个更好的地方来存储它。但如前所述,这里有一些在 redux 方面有更多经验的开发人员可以为您提供这个问题的正确答案。
-
它是一个对象存储,所以我认为它可以存储一个承诺。我同意你关于持续时间的观点,这就是为什么我不愿意将它存储在 Redux 中。但是,它是应用程序状态的一部分,在商店之外拥有状态感觉就像是一种反模式。为了回答您之前的评论,呼叫被延迟以防止污染 myFunction 因为必须处理获取的数据等。谢谢
-
问题类似于stackoverflow.com/a/18745499/6757219 但真正的问题是在 Redux 状态容器的上下文中将“dataPromise”存储在哪里。
标签: javascript redux