我正在编写一些代码,希望每个循环每60秒运行一次,但是目前每个循环都可以立即运行。编写代码的目的是查看表单是否已更改以及是否保存了表单。我的setInterval
设置是否错误?
function saveHelper(formId) {
for(var i = 0; i < 4; i++) {
save(formId);
}
}
function save(formId) {
console.log('might save');
var changed = formChanges(formId);
var intId = setInterval(stall, 60000);
if(changed.length > 0) {
console.log('would save');
//document.getElementById(formId).submit();
}
clearInterval(intId);
}
function stall() {
return true;
}
答案 0 :(得分:2)
您正在将间隔视为某种同步睡眠方法,事实并非如此。更改代码应位于setInterval的内部,不应在间隔之后使用。
var intId = setInterval(function () {
if(changed.length > 0) {
console.log('would save');
//document.getElementById(formId).submit();
}
}, 60000);
答案 1 :(得分:1)
setInterval不会暂停您的代码,它只是计划一些代码在将来的某个时间运行。例如,当您这样做时:
var intId = setInterval(stall, 60000);
表示“每60000毫秒,运行函数stall
”。这行代码完成后,它将立即运行您的下一行代码,进行保存,然后清除间隔。清除间隔会取消该间隔,因此现在在60000毫秒内什么也不会发生。
相反,您需要执行以下操作:
function saveHelper(formId) {
let count = 0;
const intId = setInterval(function () {
if(changed.length > 0) {
console.log('would save');
//document.getElementById(formId).submit();
}
count++;
if (count === 4) {
clearInterval(intId);
}
}, 60000);
}
每60000毫秒,内部函数将运行并进行保存。保存后,它会检查我们执行此操作的次数,一旦达到4,它就会清除间隔以阻止它再次发生。