使用setInterval每60秒保存一次表单不起作用

时间:2018-08-30 13:53:07

标签: javascript setinterval

我正在编写一些代码,希望每个循环每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;
}

2 个答案:

答案 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,它就会清除间隔以阻止它再次发生。