可观察的计时器滴答随着时间的推移而减慢

时间:2017-12-16 14:41:28

标签: angular timer rxjs observable

我使用可观察的计时器来计算拍卖剩余的时间,并且不想依赖于客户端时间。所以,我对我们的API进行服务调用,返回本地化的时间,然后创建一个可观察的计时器,在每1秒后调用一次,我可以在服务器时间加1秒来复制客户端的当前服务器时间。 / p>

问题是,在每15分钟之后,在服务器时间和我们的计时器给出的时间之间存在大约6秒的差距。在一小时内,差异增加到大约40秒,并且只要我们不刷新或重新打开页面,它就会继续增加。

我知道这听起来很傻但是在1秒间隔后被调用的可观察计时器正在减慢一点(每10分钟左右3秒)。

这是我正在使用的代码:

//get the server date
this.service.getServerTime().subscribe(serverDate => {
    this.serverDate = serverDate;
}, error => { });

要启动计时器,我正在使用

//start the timer using observable
let timer = Observable.timer(1000, 1000);
this.timerSubscription = timer.subscribe((t: any) => {
    this.timerExecuted();
});

private timerExecuted(): void {
    if (!this.serverDate) {
        return;
    }       
    //add 1 second to the server date
    this.serverDate.setSeconds(this.serverDate.getSeconds() + 1);

    //console log the server date after adding 1 second
    console.log(this.serverDate);
}

当我检查console.log(this.serverDate)时,最初它以正确的日期开始。假设时间为:07:15:00PM,在一小时后,记录的时间将为08:14:20PM。准确的24小时后,奇怪的是,记录的时间大约是06:45PM,这是偏离目标的。

主要目标是实时在客户端上运行服务器时间,而不必依赖用户的本地时钟。当用户以角度着陆时,我从服务器获取当前时间,使用可观察(1秒间隔)启动计时器并在我收到的服务器时间中添加秒。我从观察中得到的刻度在几分钟内显着减慢。

1 个答案:

答案 0 :(得分:0)

我们注意到在某些时候间隔增加了 4 倍。事实证明,某些浏览器会在失焦(非活动选项卡)时将计时器限制为每秒仅触发一次以节省电池电量。

可以在 hereherehere 中找到一些其他信息。