我真的为这里的承诺而苦苦挣扎。
现在已经一天多了,我还是想不通。
我是 Angular 的新手,更一般地说,我是 Promise“概念”的新手,所以我确定我缺少一些东西,但我无法弄清楚。
基本上,我正在使用$post
请求调用远程 Web 服务,并在该success
方法中更新一些数据$rootScope
登录服务
this.login = function(url, request) {
return $http.post( url, request ).
success(function(data) {
if (data.return_code === 0) {
userData = {
name: data.name,
role: data.role
}
/*
* Inside this function, $rootScope gets
* updated with userData
*/
storage.update('user_details', userData)
}
else {
// non authorized user
}
return userData
}).
error(function(data, status) {
throw new Error()
})
}
然后,在控制器中,我做了类似的事情
$scope.login = function(url, request) {
loginService.login(url, request).then(function(response) {
/* this is a ui.router redirection to the state 'home' */
$state.go('home')
})
}
问题是在新页面(home
状态)中,$rootScope 没有更新,除非我重新加载页面,这“解决”了问题。
在我看来,promise 的调用不会等待它完成页面重定向,但即使将 $state.go 包装在 $timeout 中也不能解决问题......
我真的迷路了,任何帮助将不胜感激