我想在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();
}
还有其他更好的方法吗?
答案 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>