Javascript超时循环不等待

时间:2016-09-15 02:36:42

标签: javascript loops settimeout

我正在尝试在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();

1 个答案:

答案 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();