每5次调用后执行间隔回调

时间:2015-10-24 10:51:50

标签: javascript

我的页面上每隔6秒就有一个间隔运行;它很好地填充了大量数据。

但是,有一条数据仅每30秒从数据库更新一次。所以,我想等待执行这个回调,因为如果它事先执行,它会擦除​​所有内容。

我的代码等待30秒,然后检查。我喜欢的是相反的:立即检查,然后等待30秒,然后再次检查。

我觉得我的代码是下面的代码,并且有一个更优雅的解决方案(虽然我不认为do / while循环符合要求)。我错了吗?

counter = 0;
maxCounts = 5;

function callbackForInterval(){
    if(counter === maxCounts){
        if({data hasn't changed}){
            // wipe everything out!!!
        }else{
            // do some other stuff
        }
        counter = 0;
    }
    counter++;
}

感谢任何有用的提示。

1 个答案:

答案 0 :(得分:1)

您可以使用余数运算符(%)。

var counter = 0;
function callbackForInterval)( {
    if (counter++ % 5 === 0) {
        // This bit only runs every 5 iterations
    }
}

在第一次迭代时运行代码。要仅从第5个开始运行它,请将后增量更改为预增量。

直播示例:



var counter = 0;

function callbackForInterval() {
  if (counter++ % 5 === 0) {
    snippet.log("big tick");
    // This bit only runs every 5 iterations
  } else {
    snippet.log("little tick");
  }
}
var timer = setInterval(callbackForInterval, 500);
setTimeout(function() {
  snippet.log("done");
  clearInterval(timer);
}, 30000);
snippet.log("(stops after 30 seconds)");

<!-- Script provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="//tjcrowder.github.io/simple-snippets-console/snippet.js"></script>
&#13;
&#13;
&#13;

附注:我在上面添加了var,因为除非您在某处声明counter变量,否则您的代码将成为The Horror of Implicit Globals的牺牲品。