【发布时间】:2016-12-24 22:52:00
【问题描述】:
我正在使用 setInterval() 检查(每隔几秒)用户的令牌是否已过期。但是,因为我已经包含在 $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);
});
【问题讨论】:
标签: javascript angularjs settimeout