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

xsl*_*xsl 6 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
...
Run Code Online (Sandbox Code Playgroud)

该函数本身如下所示:

for every group in list

    .ajax(delete group items; get group items; add group items)
Run Code Online (Sandbox Code Playgroud)

我目前遇到的问题是,在循环中间,函数会以某种方式再次调用.

use*_*716 9

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

(function my_func() {
    // your code
    setTimeout( my_func, 5000 );
})();
Run Code Online (Sandbox Code Playgroud)

这会立即调用my_func,然后在5秒延迟后以函数结尾递归调用它.

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


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

(function my_func() {
    // your code
    if( some_criteria_is_met ) {
        setTimeout( my_func, 5000 );
    }
})();
Run Code Online (Sandbox Code Playgroud)

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

  • 对于未来的读者:您需要 setTimeout,而不是 setInterval。如果您的远程调用花费的时间比 setInterval 值长,它最终会被多次触发。 (2认同)