javascript计时器永久返回相同的值

时间:2018-12-24 14:54:05

标签: javascript jquery timer

我正在尝试创建一个10秒到60秒,间隔为半秒的随机计时器。但是即使我认为它应该可以工作,我的代码也无法工作,因此我需要其他人告诉我哪里出了问题。

function timer(t) {
    while (t >= 0) {
        setTimeout(function() {
            t--;
        }, 500);
    }
    alert("Time OUT!");
    console.log(t);
    return;
};
$("playbutton").click(function() {
    var randomTime = Math.round(Math.random() * 100 + 20);
    timer(randomTime);
    alert(randomTime);
});

1 个答案:

答案 0 :(得分:2)

问题是您实际上并没有改变自己的想法。确实,您是异步设置“虚拟无限”超时(因为它会尽可能快地循环),因此它们不会按您的意图每500毫秒阻塞一次执行。

我在选择器中添加了id#,因为这是我可以对其进行测试的方法。 如果您想这样做,则每次迭代将从初始时间减少1:

function timer(t) {

    let mytime = setInterval(function() {
        t--;
        if(t<=0){
          alert("Time OUT!");
          clearInterval(mytime);
        }
    }, 500);
};
$("#playbutton").click(function() {
    var randomTime = Math.round(Math.random() * 100 + 20);
    timer(randomTime);
    alert(randomTime);
});

异步功能是您通常从js学习开始的一步变化,但是理解它们很重要

相关问题