Обеспечение того, чтобы setInterval не повторялся



Я использую узел.js с socket.io и поставили на таймер интервал.



У меня есть следующее На месте. Я очищаю интервал при отключении, а также проверяю перед установкой интервала. Однако, если я часто обновляю страницу, это кажется не совсем точным. Журнал консоли будет показывать "время" с интервалами намного быстрее одной секунды и сгруппирован вместе.



Какие-либо предложения по обеспечению того, чтобы новый таймер никогда не запускался более одного раза?



socket.on('disconnect', function () {
console.log('Disconnected');
clearInterval(timer);
});

if (typeof timer != 'undefined') {
clearInterval(timer);
}

var timer = setInterval(function() {
console.log('time');
}, 1000);
625   2  

2 ответов:

Какие-либо предложения по обеспечению того, чтобы новый таймер никогда не запускался более одного раза?

Именно это и делает setTimeout()...

Если, возможно, вы имели в виду "более одного раза в секунду" вы должны знать, что setInterval() приведет к накоплению событий, если они не будут обработаны своевременно. Это будет то, что вызывает ваши промежутки менее одной секунды.

Единственный ответ на это-запустить новый одноразовый таймер, используя setTimeout() из таймаута сам обработчик. Рекурсивный вызов setTimeout в рамках собственного обратного вызова гарантирует, что в очередь событий будет помещено только одно событие таймера за раз.

Перезагрузка страницы убивает все таймеры. Проблема в браузерах: когда вы создаете 1-секундный интервал и вызываете alert событие SpiderMonkey interval Mozilla становится 1 секундой после того, как alert былзакрыт , а V8 Google запускает его через 1 секунду после того, как alert былвызван . Речь идет о другой организации потока кода в движках.

Comments

    Ничего не найдено.