[英]Controller doesn't wait for resolve
I have a resolve, but the controller seems to run before it finishes. 我有解决的方法,但是控制器似乎在完成之前就已运行。
$stateProvider.state('index', {
url: '/',
templateUrl: '/angular/general/index.general.html',
resolve: {
data: function(currentUser){
currentUser.resolveLogin();
}
},
controller: ['$state', 'currentUser', function($state, currentUser){
console.log('3');
if (currentUser.bLoggedIn()){
$state.go('index.dashboard');
}
}]
});
In currentUser 在currentUser中
this.resolveLogin = function(){
var deferred = $q.defer();
console.log('1')
$http.get('/profile')
.success(function(res){
console.log('2.1')
root.user = res.data;
deferred.resolve();
})
.error(function(res){
console.log('2.2')
deferred.reject();
});
// return promise object
return deferred.promise;
}
Instead of logging in the order of 1, 2.1, 3 it logs in the order of 1, 3, 2.1. 而不是以1、2.1、3的顺序登录,而是以1、3、2.1的顺序登录。
You forget return promise from resolve function, so angular should not wait it. 您会忘记来自resolve函数的返回承诺,因此angular不应等待它。
So, if currentUser.resolveLogin();
因此,如果
currentUser.resolveLogin();
return promise you should just return it 退货承诺,你应该只退货
resolve: {
data: function(currentUser){
return currentUser.resolveLogin();
}
},
Sidenote: $http
already return promise, so, you not need create it manually, and can reduce your this.resolveLogin
to something like this 旁注:
$http
已经返回诺言,因此,您无需手动创建它,并且可以将this.resolveLogin
减少为类似这样的内容
this.resolveLogin = function(){
console.log('1')
return $http.get('/profile')
.success(function(res){
console.log('2.1')
root.user = res.data;
})
.error(function(res){
console.log('2.2')
});
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.