AngularJS:app.run() 中的承诺永远陷入循环
AngularJS: Promise in app.run() stuck in loop forever
我在我的 AngularJS 应用程序中使用 app.run() 来检查用户是否已登录,然后再显示站点以阻止非注册用户访问各种站点。我尝试用承诺来做这件事,因为以前,每当我重新加载页面时,isLoggedIn 函数都会返回 false,getStatus 还没有从服务器返回答案。
现在使用承诺,网站只是永远在循环中调用自己,我猜是因为当承诺得到解决时,这个过程会重复自己。我哪里出错了,我该如何解决这个问题?提前感谢,非常感谢帮助!
这是我在应用程序中的代码.js:
app.run(function($rootScope, $state, authService){
$rootScope.$on('$stateChangeStart', function(event, next, nextParams, from, fromParams){
event.preventDefault();
authService.getUserStatus().then(function(){
console.log(authService.isLoggedIn());
if(next.access.restricted && !authService.isLoggedIn()){
$state.go('index', {}, { reload: true });
} else {
$state.go(next, {}, { reload: true });
}
});
});
});
以下是服务身份验证服务.js:
(function(){
var app = angular.module('labelcms');
app.factory('authService', ['$q', '$timeout', '$http', function($q, $timeout, $http){
var user = null;
var isLoggedIn = function(){
if(user){
return true;
} else {
return false;
}
};
var getUserStatus = function(){
var deferred = $q.defer();
$http.get('/api/user/status')
.success(function(data){
if(data.status){
user = data.status;
deferred.resolve();
} else {
user = false;
deferred.resolve();
}
})
.error(function(data){
console.log('Error: ' + data);
user = false;
deferred.resolve();
});
return deferred.promise;
};
return ({
isLoggedIn: isLoggedIn,
getUserStatus: getUserStatus,
login: login,
logout: logout,
signup: signup
});
}]);
})();
它循环是因为每次执行$state.go(next, {}, { reload: true });
时,它都会再次击中您的$rootScope.$on
。
在您进入安全服务之前,我会检查我们是否真的在受限路线上。
app.run(function($rootScope, $state, authService){
$rootScope.$on('$stateChangeStart', function(event, next, nextParams, from, fromParams){
if(!next.access.restricted) return;
authService.getUserStatus().then(function(){
console.log(authService.isLoggedIn());
if(!authService.isLoggedIn()){
$state.go('index', {}, { reload: true });
});
});
});
相关文章:
- 我的职位回报太快了,如何做出承诺
- 打破承诺链的好方法是什么
- 从函数返回角度承诺
- 我怎样才能获得承诺的价值
- 延期承诺值未更新/解析/延期
- 在承诺链中处理早期回报的最佳方式
- 承诺在非节点式回调上使用Bluebird
- 简单的ES6承诺问题-交换解决和拒绝参数
- 组合承诺和非承诺值
- 带有对象/原型的链式承诺(Q延期)
- AngularJS$q承诺使用socket.io
- 成功回调永远不会被JSONP请求调用
- React JS:未捕获(在承诺中)语法错误:在位置 0 的 JSON 中意外<令牌
- UserInformation.getFirstNameAsync承诺永远不会实现
- AngularJS:app.run() 中的承诺永远陷入循环
- 承诺永远不会实现
- mpromise/僧侣承诺永远不会解决
- 单元测试angularjs$q.all-承诺永远不会完成
- JavaScript永远悬而未决的承诺是坏的吗?
- 动态序列的承诺(Q)永远不会去捕捉