ClearInterval函数在我的情况下不起作用

时间:2016-09-10 16:23:52

标签: javascript

function active_timer(){
    var time = 5000;

    interval = setInterval(function(){
        console.log('interval');
    },time);
}

active_timer();

socket.on('timer', function (data) {

    console.log('here') // it triggered

    clearInterval(interval); // don't work
    active_timer() //resume
});

我试过这个并且它不起作用,因为console.log仍然每5秒触发一次。有什么线索的原因?

1 个答案:

答案 0 :(得分:0)

您的代码在技术上正常运行,但您的控制台日志具有误导性。

你已经开始了一个每5秒触发一次的间隔。每次你的插座发射时,你都要清除间隔,然后立即开始一个新的。这给出了间隔中没有间隙的错觉,但有。

您可以将console.log('interval')更改为console.log(interval)进行测试。因此,它不会打印“interval”,而是打印出引用interval对象的变量的值。这由一个数字表示,每当间隔停止并重新启动时,该数字就会改变。

为了清楚起见,无法恢复间隔,只有新的启动并且现有停止。

var interval = null;

function startTimer() {
  // store the reference to our interval
  interval = setInterval(function() {
    console.log('triggered interval', interval);
  }, 2000);
  
  console.log('new interval started', interval);
}

startTimer();

// button click to simulate your socket event
$('#simulate').on('click', function() {
  console.log('received simulated event');
  clearInterval(interval);
  startTimer();
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button id="simulate">Simulate Socket Event</button>