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

ClearInterval function doesn't work in my case

本文关键字:情况下 不起作用 我的 函数 ClearInterval      更新时间:2023-09-26
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秒。任何线索为什么?

你的代码在技术上是正确的,但你的控制台日志是误导。

你已经开始了一个间隔,每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>