2016-09-10 6 views
-4
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 секунд. Почему?Функция ClearInterval в моем случае не работает

+0

50000 составляет 50 секунд. Удалите вызов еще раз и посмотрите, работает ли он – Li357

+4

Либо потому, что вы вызываете 'active_timer' сразу после того, как вы очистили интервал, или потому, что событие' 'timer '' никогда не запускается. –

+0

По таймеру вы очищаете интервал, а затем запускаете его снова. Передать значение интервала в консольный журнал. Это то же самое? – Seb

ответ

0

Ваш код технически работает правильно, но ваши журналы консоли вводят в заблуждение.

Вы начали интервал, который срабатывает каждые 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>

+0

, так что ничего плохого в моем коде вообще нет? –

+1

@MariaJane Ничего плохого в зависимости от того, что вы опубликовали. – Soviut

Смежные вопросы