使用setTimeout()可以在指定的时间启动一个函数:
setTimeout(function, 60000);
但是如果我想多次启动这个函数呢?每当一个时间间隔过去时,我都希望执行函数(假设每60秒执行一次)。
使用setTimeout()可以在指定的时间启动一个函数:
setTimeout(function, 60000);
但是如果我想多次启动这个函数呢?每当一个时间间隔过去时,我都希望执行函数(假设每60秒执行一次)。
当前回答
如果你不关心计时器内的代码是否会比你的间隔时间长,请使用setInterval():
setInterval(function, delay)
反复触发作为第一个参数传入的函数。
一个更好的方法是使用setTimeout和一个自动执行的匿名函数:
(function(){
// do some stuff
setTimeout(arguments.callee, 60000);
})();
这保证了在执行代码之前不会进行下一次调用。我使用了论点。本例中的Callee作为函数引用。给函数命名并在setTimeout中调用是一种更好的方式因为参数。Callee在ecmascript 5中已弃用。
其他回答
有两种方法叫-
setInterval(function (){functionName();}, 60000); setInterval (functionName, 60000);
以上函数将每60秒调用一次。
如果你不关心计时器内的代码是否会比你的间隔时间长,请使用setInterval():
setInterval(function, delay)
反复触发作为第一个参数传入的函数。
一个更好的方法是使用setTimeout和一个自动执行的匿名函数:
(function(){
// do some stuff
setTimeout(arguments.callee, 60000);
})();
这保证了在执行代码之前不会进行下一次调用。我使用了论点。本例中的Callee作为函数引用。给函数命名并在setTimeout中调用是一种更好的方式因为参数。Callee在ecmascript 5中已弃用。
一个订阅setInterval()并使用clearInterval()来停止永久循环的好例子:
function myTimer() {
}
var timer = setInterval(myTimer, 5000);
调用这一行来停止循环:
clearInterval(timer);
在jQuery中,你可以这样做。
函数random_no () { var跑= math . random (); jQuery (# random_no_container) . html(跑); } setinterval(函数(){ ///调用你的函数 random_no (); }, 6000);//将Interval改为test。例如:5000秒 < script src = " https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js " > < /脚本> < div id = " random_no_container " > 你好。在这里你可以看到每6秒后的随机数 < / div >
更好地使用jAndy的答案来实现一个轮询函数,该函数每间隔秒轮询一次,并在超时秒后结束。
function pollFunc(fn, timeout, interval) {
var startTime = (new Date()).getTime();
interval = interval || 1000;
(function p() {
fn();
if (((new Date).getTime() - startTime ) <= timeout) {
setTimeout(p, interval);
}
})();
}
pollFunc(sendHeartBeat, 60000, 1000);
更新
根据注释,将其更新为传递函数停止轮询的能力:
function pollFunc(fn, timeout, interval) {
var startTime = (new Date()).getTime();
interval = interval || 1000,
canPoll = true;
(function p() {
canPoll = ((new Date).getTime() - startTime ) <= timeout;
if (!fn() && canPoll) { // ensures the function exucutes
setTimeout(p, interval);
}
})();
}
pollFunc(sendHeartBeat, 60000, 1000);
function sendHeartBeat(params) {
...
...
if (receivedData) {
// no need to execute further
return true; // or false, change the IIFE inside condition accordingly.
}
}