“无限”setinterval函数“超时”

时间:2015-08-27 22:41:40

标签: javascript setinterval

有一个我无法弄清楚的有点奇怪的问题。我设置了一个javascript计时器,它所做的就是每秒重复一次间隔,检查2个日期之间的差异并显示结果。一切似乎都很好,但是当浏览器打开几分钟(没有触摸它......真的走开了一段时间)时,它似乎“超时”并停止运行。没有控制台错误消息或任何东西,代码只是停止执行..想知道是否有人知道是什么原因造成的?我的代码是问题还是这是一个内置的浏览器函数来阻止js函数如果用户在页面上没有输入一段时间?

编辑抱歉,请注意此计时器目前设置为运行大约40天,因此它永远不会真实地满足用户会话中的clearinterval语句。添加到函数的未来日期变量im是来自PHP的动态unix时间戳,其日期大约为40天。目前设定为1444761301.88

function MModeTimer(futureDate) {
    zIntervalActive = true;
    var currentTime = new Date().getTime() / 1000;
    var timeRemaining = futureDate - currentTime;

    var minute = 60;
    var hour = 60 * 60;
    var day = 60 * 60 * 24;
    var zDays = Math.floor(timeRemaining / day);
    var zHours = Math.floor((timeRemaining - zDays * day) / hour);
    var zMinutes = Math.floor((timeRemaining - zDays * day - zHours * hour) / minute);
    var zSeconds = Math.floor((timeRemaining - zDays * day - zHours * hour - zMinutes * minute));

    if (zSeconds <= 0 && zMinutes <= 0) {
        console.log("timer in negative");
        // timer at zero 
        clearInterval(zTimeInterval);

    } else {

        if (futureDate > currentTime) {
            console.log("timer interval running");
            // changes html as part of function
        }

    }


}

zTimeInterval = setInterval(function() {
    MModeTimer(zNewTime)
}, 1000);

1 个答案:

答案 0 :(得分:1)

这一行:

clearInterval(zTimeInterval);

在条件:

时清除间隔
if (zSeconds <= 0 && zMinutes <= 0) {

满足。

根据你在里面写的日志,这是错误的。您正在检查zSeconds和zMinues是否小于或等于0.因此当两者都为0时,将清除间隔。

修改

根据您的编辑和解释,我是否可以建议添加一个不在任何条件下的控制台日志?:

function MModeTimer(futureDate) {
    console.log('running');
    //... rest of your code

通过这种方式,您可以确定间隔是否正在运行,一段时间后您的条件可能不是TRUE,您将看不到任何日志,但间隔仍将继续运行。