Ваш код технически работает правильно, но ваши журналы консоли вводят в заблуждение.
Вы начали интервал, который срабатывает каждые 5 секунд. Каждый раз, когда ваш сокет даже срабатывает, вы очищаете интервал, а затем сразу начинаете новый. Это дает иллюзию, что нет промежутков в интервалах, но есть.
Вы можете проверить это, изменив console.log('interval')
на console.log(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>
50000 составляет 50 секунд. Удалите вызов еще раз и посмотрите, работает ли он – Li357
Либо потому, что вы вызываете 'active_timer' сразу после того, как вы очистили интервал, или потому, что событие' 'timer '' никогда не запускается. –
По таймеру вы очищаете интервал, а затем запускаете его снова. Передать значение интервала в консольный журнал. Это то же самое? – Seb