setTimeout()和setInterval()没有正常工作

3
请看以下示例。

var secondsCount = 0;
if( secondsCount <= 1800 )
{
   setInterval(function(){
     secondsCount++; 
     console.log( secondsCount ) 
   }, 1000);
}

如果我们运行以上代码将近1800秒(30分钟),我们会发现secondsCount值和实际经过的秒数(或分钟数)不相等。

3
这可能有助于理解为什么。 - maazadeeb
1
你想要实现什么? - Klímačka
@Klímačka:在会话超时前1分钟,我需要显示登录弹出窗口。为此,我需要维护一个计数器变量。 - Milind
@MrJ:谢谢,您能提供一个简单的代码示例吗? - Milind
然后做类似于 setTimeout(function () { showPopup(); }, 29 * 60 * 1000); 这样的事情,不要按秒计算。但无论如何,最好通过轮询从服务器获取此信息,因为基于客户端代码来确定登录状态是不安全的。 - Klímačka
显示剩余3条评论
1个回答

0

试试这个...

var secondsCount = 0;

var x = setInterval(function() {
    secondsCount++; 
    console.log(secondsCount);

    if (secondsCount >= 1800) {
        clearInterval(x);
    }

}, 1000);

请注意,setIntervalsetTimeout被强制至少使用最小延迟。请参阅延迟超过指定时间的原因。在实践中,无法保证回调将在“精确”的设置时间内调用。

如果您在代码中包含解释以及如何解决问题的说明,您将获得更多的投票。此外,请确保您的代码格式尽可能清晰。 - Soviut
谢谢你的建议。我会尽快去做。 - Eimran Hossain Eimon
1
@EimranHossainEimon:我尝试了上面的代码,但在FireFox 65上无法正常工作。如果您运行代码片段,您会发现毫秒正在增加。 - Milind
请查看此链接:https://dev59.com/WJjga4cB1Zd3GeqPMZY1 - Eimran Hossain Eimon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接