关于sleep:在JavaScript中每N秒调用一次异步函数

Calling an asynchronous function every N seconds in JavaScript

本问题已经有最佳答案,请猛点这里访问。

我有一个Java脚本函数,需要一个未定义的时间来完成。在一个循环中,我希望等待函数完成,然后等待一个定义的时间(例如5000毫秒),然后再次调用该函数。如何在Java脚本中实现这一点?

基本上我想要这个:

1
2
3
4
5
call function and wait until it is finished
wait another 5000 seconds
call function and wait until it is finished
wait another 5000 seconds
...

函数本身如下所示:

1
2
3
for every group in list

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

我现在遇到的问题是,在循环的中间,函数以某种方式再次被调用。


生成一个在计时器结束时递归调用自身的函数:

1
2
3
4
(function my_func() {
    // your code
    setTimeout( my_func, 5000 );
})();

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

这样,在代码完成之前计时器不会开始。

您可以将setTimeout()放在if语句中,以使递归依赖于某些条件:

1
2
3
4
5
6
(function my_func() {
    // your code
    if( some_criteria_is_met ) {
        setTimeout( my_func, 5000 );
    }
})();

注意,这意味着代码是同步的。如果您正在运行一些异步代码,比如Ajax请求,那么方法会有所不同。