我正在尝试在javascript中创建一个循环,我希望函数timeLoop()被调用10秒然后停止。我试图用setInterval做这个,但似乎它没有等待我设置的超时,无论我有多大的超时时间。每次我运行它时我都会得到:RangeError:超出最大调用堆栈大小,不确定如何创建一个在执行前等待一段时间的定时循环。
var seconds = new Date().getSeconds();
var mainFunc = function () {
console.log("Time: " + seconds);
timeLoop();
}
var timeLoop = function () {
var newTime = new Date().getSeconds();
var timer = newTime - seconds;
console.log("New Time: " + newTime + " Elapsed time: " + timer);
if(timer == 10) {
clearInterval(timeLoop());
return console.log("Times up 10 seconds!");
}
setInterval(mainFunc(), 10000);
}
mainFunc();
答案 0 :(得分:0)
您必须只设置一次间隔,但在此代码中,每次调用方法时都会设置它。如果你想检查时差,也可以在开始时获得当前时间,然后在计时器上获得时差。
更改它并使用setTimeout!
var startTime= new Date();
var mainFunc = function () {
console.log("Time: " + startTime);
timeLoop();
}
var timeLoop = function () {
var newTime = new Date();
// get time difference in miliseconds
// if you want it in seconds easily: parseInt(timer/1000)
var timer = newTime - startTime;
console.log("New Time: " + newTime + " Elapsed time (miliseconds): " + timer);
if(timer == 10000) {
return console.log("Times up 10 seconds!");
}
setTimeout(mainFunc, 10000);
}
mainFunc();