AngularJS $ interval自动停止

时间:2015-12-11 11:17:44

标签: javascript angularjs intervals

我在我的应用中使用angularJS。我有$ interval的计时器。 当我打开浏览器时,它可以工作,但有时会停止。
我试过这些案子:

  • 打开标签并等待15-20分钟
  • 打开标签为无效并等待15-20分钟
  • 锁定窗口并再次等待15-20分钟

在这些情况下一切正常,但当我锁定窗户4小时后,我发现计时器在一小时后停止更新。

还有一些情况是Windows未锁定时计时器正在停止,所以你可以帮我解决这个问题吗?

function setTime() {
        var now = new Date(timeStamp);
        $scope.time = new Date(new Date( now.getTime() + (now.getTimezoneOffset()  60000)).getTime() + ($scope.timezoneOffset  60000));
        if (!_intervalId) {
            _intervalId = $interval(function () {
                var tempTime = new Date().getTime();
                timeStamp += (tempTime - currentTime) > 1100 || (tempTime - currentTime) < 900 ? 1000 : tempTime - _currentTime;
                _currentTime = tempTime;
                var now = new Date(timeStamp);
                $scope.time = new Date(new Date( now.getTime() + (now.getTimezoneOffset()  60000)).getTime() + ($scope.timezoneOffset  60000))
            }, 1000)
        }
    }

1 个答案:

答案 0 :(得分:1)

有些浏览器会停止长时间运行的任务以节省电量。据我所知,它并没有真正记录在任何地方。可以在某些浏览器中配置它,在每个人最喜欢的(叹气)IE中 - 它在Windows电源选项中:

enter image description here

所以这真的发生了,你不会失去理智。浏览器正试图在运行长时间运行任务的站点上节省电池电量。

我建议您检测页面上的活动(例如,鼠标移动)并重新启动间隔,如果它确实更新了您为此目的而在一秒钟内保留的计数器。很脏但很可能会有效。