我正在使用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);
});
谢谢,但这产生了同样的问题,每次路线变化 –