0

使用 setInterval/setTimeout,我怎样才能确保我的函数在等待一段时间然后再次执行之前完成执行,完成,然后等待,等等。谢谢。

4

2 回答 2

5

这是一系列链接的经典用例setTimeout

setTimeout(foo, yourInterval);
function foo() {
    // ...do the work...

    // Schedule the next call
    setTimeout(foo, yourInterval);
}

由于setTimeout只安排对该函数的一次调用,因此您可以在函数完成其工作后重新安排它(如果合适的话)。

与 不同setInterval的是,即使您的函数所做的工作是异步的,只要您从异步工作的回调中重新安排它,它也能正常工作。例如:

setTimeout(foo, yourInterval);
function foo() {
    callSomethingAsynchronous(function() {
        // ...we're in the async callback, do the work...

        // ...and now schedule the next call
        setTimeout(foo, yourInterval);
    });
}

相反,如果你正在做一些异步的事情,那么setInterval快速使用就会变得混乱。

于 2013-01-27T00:10:50.533 回答
0
function execute_and_wait( repeated_function, time_delay ) {
    var next_run = function () {
        var complete_callback = function () {
            next_run();
        }
        var killcode = setTimeout(
            function () {
                repeated_function(complete_callback);
            },
            time_delay 
        );
        return killcode;
     };
     return next_run;
}

用法 :

// Runs a function that prints hi every 2 seconds
// Kills it after 10 seconds
var ka = function (r) { alert('hi'); r(); };
var runka = execute_and_wait(ka,2000);
var killka = runka();
setTimeout( 
   function () {
       clearTimeout(killka);
   },
   10000
);
于 2013-01-27T00:25:02.223 回答