我的页面上每隔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++;
}
感谢任何有用的提示。
答案 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;
附注:我在上面添加了var
,因为除非您在某处声明counter
变量,否则您的代码将成为The Horror of Implicit Globals的牺牲品。