2011-09-06 102 views
4

我有一个Java脚本函数,需要undefined时间才能完成。在一个循环中,我想等待功能完成,然后等待一段确定的时间(例如5000毫秒)并再次调用该函数。我如何在Java脚本中完成此操作?在JavaScript中每隔N秒调用一次异步函数

基本上我想这样的:

call function and wait until it is finished 
wait another 5000 seconds 
call function and wait until it is finished 
wait another 5000 seconds 
... 

函数本身看起来像这样:

for every group in list 

    .ajax(delete group items; get group items; add group items) 

我现在的问题是,在环中间的功能不知何故再次调用。

回答

6

作出这样的递归地调用其自身在端部上的计时器的函数:

(function my_func() { 
    // your code 
    setTimeout(my_func, 5000); 
})(); 

这立即调用my_func,然后递归地在函数的5秒的延迟后结束调用它。

这样,定时器才会开始,直到您的代码完成。


你可以放置setTimeout()if声明使递归依赖于一些标准:

(function my_func() { 
    // your code 
    if(some_criteria_is_met) { 
     setTimeout(my_func, 5000); 
    } 
})(); 

注意,这意味着你的代码是同步。如果您正在运行一些异步代码,就像AJAX请求一样,该方法会有所不同。

+0

你是对的。我正在使用AJAX请求。我会更新这个问题。 – xsl

+1

这不是*不同 - 让你的AJAX回调函数调用setTimeout(假设你的.ajax函数在成功完成时具有回调函数)。如果AJAX调用没有成功完成,你打算做什么? – RobG

+0

我会忽略不成功的呼叫。实际上,我在函数中有多个AJAX调用,所以如果成功完成,我无法真正执行setTimeout。 – xsl