someFunction() {
//........ some stuff
else {
const getData = setInterval(() => {
this.sendRequest(id);
if (this.state.calls === this.state.selectedItems.length) {
this.setState({ done: true });
clearInterval(getData);
}
}, this.changeInterval());
}
},
changeInterval() {
if(this.state.processed === true) {
return 1000;
} else {
return parseInt(this.state.userSetValue, 10) * 1000 + 1000;
}
},
sendRequest(){
//........ some stuff
let {calls, processed} = this.state;
if(!processed){
processed = true;
}
calls++;
this.setState({calls, processed});
//........ some stuff
}
据我所知,setInverval()
函数在运行函数this.sendRequest(id)
后没有检查它的时间间隔是否已经改变。
我的问题是我必须在等待一段时间后运行sendRequest()
,并且可以在我的应用中动态更改一些时间。目前,它仅在 FIRST 设置的时间间隔内运行。
如何在每次执行setInterval()
时更改this.sendRequest(id)
的时间间隔?
更新
我对someFunction()
进行了一些更改:
someFunction() {
//........ some stuff
else {
let delay = parseInt(this.state.userSetValue, 10) * 1000 + 1000;
let runFunction = () => {
if (this.state.processed) {
delay = 1000;
}
// if (this.state.calls === this.state.selectedItems.length) {
// this.setState({ done: true });
// clearTimeout(runFunction);
// }
this.sendRequest();
setTimeout(runFunction, delay);
}
setTimeout(runFunction, delay);
}
}
现在的问题是:
1)代码保持无限运行而不停止(注释掉的if
语句没有停止)
2)我希望第一次调用this.sendRequest()
在parseInt(this.state.userSetValue, 10) * 1000 + 1000
时间后执行,其余连续调用在1000
ms之后执行。
我必须拨打this.sendRequest()
this.state.selectedItems.length
次。第一个调用始终具有parseInt(this.state.userSetValue, 10) * 1000 + 1000
ms的延迟,而其余调用具有1000
ms。
有没有人可以在第一次调用某个函数后显示如何更改定时器间隔的示例?
答案 0 :(得分:0)
其中一种方法是使用setTimeout()
代替setInterval()
。基本思路如下:
function doWork() {
// Do your work here
// Schedule more work with a new delay
var newDelay = 2000;
doWorkAfterDelay(newDelay)
}
function doWorkAfterDelay(delay) {
setInterval(doWork, delay)
}
var intialDelay = 1000;
doWorkAfterDelay(intialDelay);