“infinite"设置interval函数“定时”

"infinite" setinterval function "timing out"

本文关键字:函数 定时 interval infinite quot 设置      更新时间:2023-09-26

有一个有点奇怪的问题,我不能弄清楚。我设置了一个javascript计时器,它所做的就是每秒钟重复一个间隔,检查两个日期之间的差异并显示结果。一切似乎都很好,然而,当让浏览器打开几分钟(不碰它…真的走开一段时间),它似乎"暂停"并停止运作。没有控制台错误消息或任何东西,代码只是停止执行。我想知道有没有人知道是什么引起的?是我的代码的问题,还是这是一个内置的浏览器功能,以停止js函数,如果有一个页面上的用户在一段时间内没有输入?

edit抱歉,应该提到这个计时器被设置为运行大约40天,所以它永远不会真正满足用户会话中的clearinterval语句。添加到函数中的未来日期变量是来自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);

这一行:

clearInterval(zTimeInterval);

清除间隔,当条件:

if (zSeconds <= 0 && zMinutes <= 0) {

是满足。

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

<标题>编辑

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

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

这样您可以确保如果间隔正在运行,也许您的条件在一段时间后不为TRUE,并且您不会看到任何日志,但间隔仍在运行