重复setTimeout

Mr.*_*1.0 46 javascript settimeout

我试图setTimeout每10秒重复一次.我知道setTimeout默认只等待然后执行一次动作.我该如何重复这个过程?

setTimeout(function() {
  setTimeout(function() {
    console.log("10 seconds");
  }, 10000);
}, 10000);
Run Code Online (Sandbox Code Playgroud)

uzy*_*zyn 74

也许你应该使用 setInterval()

  • 一些可能有用的其他文档:https://developer.mozilla.org/en/DOM/window.setInterval (10认同)
  • 您甚至没有提供其他选择。[原因](/sf/ask/51094501/#answer-731625)使用重复的`setTimeout`而不是`setInterval`。您只是说了很明显,这很不错,因为有时它不是很明显,但是没有提供原始问题的实际答案。 (3认同)

nnn*_*nnn 43

setInterval()可能是你正在寻找的东西,但是如果你想做的话也能得到同样的效果setTimeout():

function doSomething() {
    console.log("10 seconds");
    setTimeout(doSomething, 10000);
}

setTimeout(doSomething, 10000);
Run Code Online (Sandbox Code Playgroud)

或者,如果您不想声明单独的函数并希望坚持使用函数表达式,则需要使其成为命名函数表达式:

setTimeout(function doSomething() {
    console.log("10 seconds");
    setTimeout(doSomething, 10000);
}, 10000);
Run Code Online (Sandbox Code Playgroud)

(如果您不介意使用已弃用的语言功能,请使用arguments.callee.)


Rik*_*kar 18

根据我的说法,setInterval()是你的最佳方式.
这是一些代码:

 setInterval(function() {

//your code

}, 10000); 
// you can change your delay by changing this value "10000".
Run Code Online (Sandbox Code Playgroud)

  • 请注意,这会安排函数体在调用 setInterval 方法延迟 10000 毫利斯后执行 (2认同)

Aad*_*hah 16

与@nnnnnn和@uzyn提供的答案不同,我不鼓励你利用setInterval以下答案中阐述的原因.而是使用以下Delta Timing脚本:

function DeltaTimer(render, interval) {
    var timeout;
    var lastTime;

    this.start = start;
    this.stop = stop;

    function start() {
        timeout = setTimeout(loop, 0);
        lastTime = + new Date;
        return lastTime;
    }

    function stop() {
        clearTimeout(timeout);
        return lastTime;
    }

    function loop() {
        var thisTime = + new Date;
        var deltaTime = thisTime - lastTime;
        var delay = Math.max(interval - deltaTime, 0);
        timeout = setTimeout(loop, delay);
        lastTime = thisTime + delay;
        render(thisTime);
    }
}
Run Code Online (Sandbox Code Playgroud)

上面的脚本render尽可能接近指定的函数运行给定的函数interval,并回答你setTimeout用来重复一个过程的问题.在您的情况下,您可以执行以下操作:

var timer = new DeltaTimer(function (time) {
    console.log("10 seconds");
}, 10000);

var start = timer.start();
Run Code Online (Sandbox Code Playgroud)