javascript - AngularJS - 在 $routeChangeStart 中运行 setInterval()

标签 javascript angularjs settimeout

我正在使用 setInterval() 来检查(每隔几秒)用户的 token 是否已过期。但是,因为我已将其包含在 $routeChangeStart 中,所以每次路线更改时都会运行该间隔。例如:如果我加载页面然后单击不同的路线,那么该间隔将再次运行,总共运行两个间隔。我在一开始就设置了clearInterval(),因为我认为它会停止任何当前间隔的运行。但是,这不会阻止间隔在每次路线更改时运行。除了在 $routeChangeStart 之外运行间隔之外,是否有办法在路线更改时停止间隔,然后重新启动它?

$rootScope.$on('$routeChangeStart', function() {
    clearInterval(interval);

    var interval = setInterval(function() {
        var token = $window.localStorage.getItem('token');
        self.parseJwt = function(token) {
            var base64Url = token.split('.')[1];
            var base64 = base64Url.replace('-', '+').replace('_', '/');
            return JSON.parse($window.atob(base64));
        }
        var expireTime = self.parseJwt(token);
        var timeStamp = Math.floor(Date.now() / 1000);
        var timeCheck = expireTime.exp - timeStamp;

        if (timeCheck <= 0) {
            console.log('time expired');
            clearInterval(interval);
        } else {
            console.log('time not expired');
        }
    }, 2000);
});

最佳答案

$scope.on('$destroy', function () { $interval.cancel(intervalReturnValue);}); 销毁间隔 在您开始间隔的 Controller 中

关于javascript - AngularJS - 在 $routeChangeStart 中运行 setInterval(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41317405/

相关文章:

php - 防止 Firefox 篡改数据

javascript - React-router v2.0 browserHistory 不工作

python - 尽管超时,urllib2.urlopen 将永远挂起

javascript - setTimeout函数中未指定延迟是否意味着零延迟?

javascript - 使用 Angular ui路由器的多步表单

javascript - 在 for 循环中解决 setTimeout 函数内的 promise

javascript - 使用 Materialise 和 jQuery 进行电子邮件验证

asp.net - 将 "onclick"属性添加到 asp.net 下拉列表项

javascript - AngularJS 中的谷歌分析

node.js - AngularJS 中的路由和用户身份验证问题