Вам нужно использовать getTime()
, а не getSeconds()
:
serverTime.setTime(serverTime.getTime() + 1000);
Использование таймера один раз в секунду - это хороший подход для получения уведомлений о времени обновлениявремя кэшированного сервера, но ваш код создает новый таймер после каждого вызова и сбрасывает старый таймер.Разница в том, что один экземпляр таймера не задерживается на время, которое занимает его слушатель timerComplete, в то время как ваш код делает это.
Если от начала onTimerComplete
до вызова ticker.start()
требуется x секунд, onTimerComplete
вызывается каждые x + 1 секунду, а не каждую 1 секунду.Следовательно, serverTime
может увеличиваться менее чем на 60 секунд в минуту.
Разница может быть незначительной (вам следует проверить ее).Если это не так, используйте один экземпляр таймера с repeatCount 0, который запускается, когда приходит время сервера.
Вы также можете вычислить текущее время сервера, добавив предварительно вычисленную разницу времени между клиентом исервер.Таким образом, вы не зависите от каких-либо нарушений в таймере, например, потому что он был задержан из-за длительных вычислений.
// Initialized when the server responds:
// difference = server time minus local time, in milliseconds
var localToServerDifference:Number =
remoteServerDateTime.getTime() - new Date().getTime();
public function updateTime():void
{
// server time = local time plus difference
serverTime.setTime(new Date().getTime() + localToServerDifference);
}