重复执行功能n秒

时间:2015-05-01 17:00:34

标签: javascript

我想在x秒内运行n函数。我尝试了什么:

var stop = false;

setTimeout(function(){stop = true}, n);

while(!stop) x();

但是这没有用......我理解的原因是setTimeout等到没有任务正在运行然后执行该函数。是对的吗?

另一种方法是:

var stop = false, started = Date.now();

while(!stop) {
    if((Date.now() - started) > n) stop = true;
    else x();
}

还有其他更好的方法吗?

4 个答案:

答案 0 :(得分:2)

var stop = false;

setTimeout(function(){stop = true}, n);

var interval = setInterval(function(){
    if(!stop){x();}else{clearInterval(interval);}
}, 0);

while语句将阻止超时功能,如果你不介意使用setInterval,你可以这样做。

答案 1 :(得分:1)

我会这样做

var t = new Date().getSeconds() + 10; // 10 seconds

while(new Date().getSeconds() <= t)
{
   //loop
}

答案 2 :(得分:1)

您可以在时间不准时重复安排:

var runRepeatedly = function(f, secs) {
  var start = Date.now();
  var reschedule = function() {
    var now = Date.now();
    if (now - start < secs * 1000) {
      setTimeout(repeat, 0)
    }
  }
  var repeat = function() {
    f();
    reschedule();
  };
  repeat();
}

...

runRepeatedly(x, n);

请注意,x不应该花太长时间才能返回。

答案 3 :(得分:0)

这是我的解决方案:

<html>
<body>
<p id="demo"></p>

<button onclick="clearInterval(myVar)">Stop time</button>

<script>
var myVar = setInterval(function(){myTimer()},1000);
function myTimer() {
    var d = new Date();
    document.getElementById("demo").innerHTML = d.toLocaleTimeString();
}
</script>
</body>
</html>