Обеспечение того, чтобы 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);
2 ответов:
Какие-либо предложения по обеспечению того, чтобы новый таймер никогда не запускался более одного раза?
Именно это и делает
setTimeout()...Если, возможно, вы имели в виду "более одного раза в секунду" вы должны знать, что
setInterval()приведет к накоплению событий, если они не будут обработаны своевременно. Это будет то, что вызывает ваши промежутки менее одной секунды.Единственный ответ на это-запустить новый одноразовый таймер, используя
setTimeout()из таймаута сам обработчик. Рекурсивный вызовsetTimeoutв рамках собственного обратного вызова гарантирует, что в очередь событий будет помещено только одно событие таймера за раз.
Перезагрузка страницы убивает все таймеры. Проблема в браузерах: когда вы создаете 1-секундный интервал и вызываете
alertсобытие SpiderMonkey interval Mozilla становится 1 секундой после того, как alert былзакрыт , а V8 Google запускает его через 1 секунду после того, как alert былвызван . Речь идет о другой организации потока кода в движках.
Comments