我希望能够每6秒调用一次函数work()
。我的jQuery代码是
function looper(){
// do something
if (loopcheck) {
setInterval(work,6000);
}
else {
console.log('looper stopped');
}
}
我遇到的问题是它快速循环工作两次,然后等待6秒。我尝试使用setTimeout
得到类似的结果。
什么可能导致工作在延迟工作之前被调用两次?
答案 0 :(得分:1)
setInterval should be avoided。如果您希望每6秒重复调用一次工作,请考虑对setTimeout进行递归调用
function loopWork(){
setTimeout(function () {
work();
loopWork();
}, 6000);
}
然后
function looper(){
// do something
if (loopcheck) {
loopWork()
}
else {
console.log('looper stopped');
}
}
当然,如果您想要停止此操作,您将保存上次调用setTimeout的值,并将其传递给clearTimeout
var timeoutId;
timeoutId = setTimeout(function () {
work();
loopWork();
}, 6000);
然后停止它
clearTimeout(timeoutId);
答案 1 :(得分:0)
使用旧式setTimeout()
var i=0;
function work(){
console.log(i++);
}
function runner(){
work();
setTimeout(runner, 6000);
}
runner();
答案 2 :(得分:0)
我更喜欢以下模式,我觉得更容易理解:
function LoopingFunction() {
// do the work
setTimeout(arguments.callee, 6000); // call myself again in 6 seconds
}
如果你想在任何时候停止它:
var LoopingFunctionKeepGoing = true;
function LoopingFunction() {
if(!LoopingFunctionKeepGoing) return;
// do the work
setTimeout(arguments.callee, 6000); // call myself again in 6 seconds
}
现在您可以通过将LoopingFunctionKeepGoing设置为false来随时停止它。