- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用单例模式来防止具有相同参数的重复网络请求。
我正在创建一个 Promise 来进行 API 调用
如果参数相同,则返回相同的 Promise,否则创建新的 Promise
我将参数本地存储在单例中以检测参数的变化
下面是我的代码
var getData = (()=>{
var prev_param; //is this the correct way to store previous parameter locally
var promise_instance;
createInstance = (param)=>{
prev_param = param;
const temp_promise = this.props.dispatch(actions.getData(param)).then(getDataResult=>{
this.setState({result: getDataResult});
});
return temp_promise;
}
return (param)=>{
if (param && prev_param !== param) {
promise_instance = createInstance(param);
}
return promise_instance;
};
})();
getData("param1");
getData("param1");
getData("param2");
getData("param2");
像这样存储以前的参数是否正确
是否有更好的方法来实现这一目标?
最佳答案
这是一种非常标准的内存方法。我不确定您的需求,但我认为您可能想使用对象或映射来存储以前的调用(除非您只想存储最后一次调用)。所以类似
const getData = (()=>{
let prevParams = {}; //is this the correct way to store previous parameter locally
const createInstance = param => {
prevParams[param] = this.props.dispatch(actions.getData(param)).then(getDataResult=>{
this.setState({result: getDataResult});
});
return prevParams[param];
}
return param => {
return param && prevParams[param] || createInstance(param);
};
})();
getData("param1");
getData("param1");
getData("param2");
getData("param2");
这里的问题是 this.props 可能不会存在于上下文中,但我假设此代码已从调用它的上下文中取出。此外, this.setState 不会每次都被调用 - 仅在第一次使用该参数时才会被调用。具有相同参数的连续调用将被传递到已解析的 Promise 链。如果您希望每次调用该函数时都调用 setState,即使使用相同的参数,那么您可能需要移动 then 语句 - 请参阅下文
const getData = (()=>{
let prevParams = {}; //is this the correct way to store previous parameter locally
const createInstance = param => {
prevParams[param] = this.props.dispatch(actions.getData(param));
return prevParams[param];
}
return param => {
return (param && prevParams[param] || createInstance(param))
.then(getDataResult=>{
this.setState({result: getDataResult});
});
};
})();
getData("param1");
getData("param1");
getData("param2");
getData("param2");
我对代码做了很多假设,如果有错误,很抱歉:)
关于javascript - 基于参数的单例模式在 JavaScript 中创建 Promise,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51212800/
我最近购买了《C 编程语言》并尝试了 Ex 1-8这是代码 #include #include #include /* * */ int main() { int nl,nt,nb;
早上好!我有一个变量“var”,可能为 0。我检查该变量是否为空,如果不是,我将该变量保存在 php session 中,然后调用另一个页面。在这个新页面中,我检查我创建的 session 是否为空,
我正在努力完成 Learn Python the Hard Way ex.25,但我无法理解某些事情。这是脚本: def break_words(stuff): """this functio
我是一名优秀的程序员,十分优秀!