有没有办法在JavaScript中定期调用函数?

有没有办法在JavaScript中定期调用函数?

你想setInterval()

 var intervalID = setInterval(function(){alert("Interval reached");}, 5000); 

setInterval()的第一个参数也可以是要评估的一串代码。

您可以使用以下命令清除周期性function

 clearInterval(intervalID); 

请注意,setInterval()通常不是定期执行的最佳解决scheme – 这实际上取决于您实际定期调用的JavaScript。

例如。 如果使用setInterval(),周期为1000ms,并且在周期性函数中做了一个偶尔需要2秒的ajax调用,那么在第一个响应返回之前,您将会进行另一个ajax调用。 这通常是不可取的。

许多图书馆都有周期性的方法来防止天真地使用setInterval的陷阱,比如Nelson给出的Prototype例子。

要使用一个带有jQuery ajax调用的函数来实现更强大的周期性执行,请考虑如下所示:

 function myPeriodicMethod() { $.ajax({ url: ..., success: function(data) { ... }, complete: function() { // schedule the next request *only* when the current one is complete: setTimeout(myPeriodicMethod, 1000); } }); } // schedule the first invocation: setTimeout(myPeriodicMethod, 1000); 

另一种方法是使用setTimeout,但跟踪variables中的已用时间,然后在每个调用中dynamic设置超时延迟,以尽可能接近所需的时间间隔执行函数,但速度不会超过您可以获取响应的速度。

每个人都有一个setTimeout / setInterval解决scheme。 我认为重要的是要注意,你可以传递函数给setInterval,而不仅仅是string。 它实际上可能有点“安全”,通过真正的function,而不是string,将“逃避”到这些function。

 // example 1 function test() { alert('called'); } var interval = setInterval(test, 10000); 

要么:

 // example 2 var counter = 0; var interval = setInterval(function() { alert("#"+counter++); }, 5000); 

你会想看看setInterval()和setTimeout()。

这里是一个体面的教程文章 。

是的 – 看看setIntervalsetTimeout在某些时候执行代码。 setInterval将是用来定期执行代码的。

看到一个演示,并在这里回答使用情况

 function test() { alert('called!'); } var id = setInterval('test();', 10000); //call test every 10 seconds. function stop() { // call this to stop your interval. clearInterval(id); } 

既然你想定期执行函数,使用setInterval

本地方法确实是setInterval() / clearInterval() ,但是如果您已经在使用Prototype库,则可以利用PeriodicalExecutor:

 new PeriodicalUpdator(myEvent, seconds); 

这可以防止重叠呼叫。 从http://www.prototypejs.org/api/periodicalExecuter

“它阻止了多个并行执行的callback函数,如果它比给定的时间间隔更长的执行时间(它保持一个内部的”运行“标志,这是在callback函数中防止exception)。使用一个在给定的时间间隔与用户交互(例如,使用提示或确认呼叫):这将避免多个消息框都等待被执行。

老问题,但..我还需要一个定期的任务跑步者,并写了TaskTimer 。 当您需要以不同的时间间隔运行多个任务时,这也很有用。

 // Timer with 1000ms (1 second) base interval resolution. var timer = new TaskTimer(1000) // Add task(s) based on tick intervals. timer.addTask({ name: 'job1', // unique name of the task tickInterval: 5, // run every 5 ticks (5 x interval = 5000 ms) totalRuns: 10, // run 10 times only. (set to 0 for unlimited times) callback: function (task) { // code to be executed on each run console.log(task.name + ' task has run ' + task.currentRuns + ' times.'); } }); // Start the timer timer.start(); 

TaskTimer在浏览器和节点中均可使用。 查看所有function的文档 。