clearInterval()在带有递归函数的if / else语句中不起作用

时间:2017-09-08 08:36:30

标签: javascript jquery timer setinterval clearinterval

我正在尝试建立一个在比赛时间和工作时间之间切换的倒计时。它以10秒的工作开始,然后当它达到0秒时我们清除间隔并将其设置为“播放”并再次调用该函数...

var model = {
intervalID: 0,
status: 'work',
workSeconds: 10,
playSeconds: 10,
}

function startCountdown(){
if (model.status === 'work') {

    model.countdown = model.workSeconds;
    model.intervalID = setInterval(function(){

        model.countdown--;
        if (model.countdown > 0) {
            console.log('work', model.countdown);
        } else {
            model.status = 'play';
            clearInterval(model.indervalId);
            startCountdown();
        }
    }, 1000);
} else if (model.status === 'play') {

    model.countdown = model.playSeconds;
    model.intervalID = setInterval(function(){
        model.countdown--;
        if (model.countdown > 0) {
            console.log('play', model.countdown);
        } else {
            model.status = 'work';
            clearInterval(model.indervalId);
            startCountdown();
        }
    }, 1000);
}
}
startCountdown();

此功能应该是控制台记录10秒倒计时工作,然后当倒计时达到0时切换到10秒倒计时,并继续这样做。

目前似乎没有清除任何间隔,并且两个间隔只是在反馈循环中保持相互设置。

为什么没有清除间隔?

1 个答案:

答案 0 :(得分:2)

我认为你有一个错字。 clearInterval(model.indervalId);应为clearInterval(model.intervalID);

我也会使用setTimeout,但我猜你已经知道了。