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秒触发一次。有什么线索的原因?
答案 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>