在JavaScript中每N秒调用一次异步函数

时间:2011-09-06 02:51:46

标签: javascript sleep

我有一个Java Script函数,需要未定义时间才能完成。在循环中,我想等到函数完成,然后等待一个定义的时间(例如5000毫秒)并再次调用该函数。我如何在Java Script中实现这一目标?

基本上我想要这个:

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)

我目前遇到的问题是,在循环中间,函数再次被调用。

1 个答案:

答案 0 :(得分:8)

创建一个在计时器上以递归方式调用自身的函数:

(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请求,那么方法会有所不同。