我在我的服务中使用此方法来获取用户
getUser : function () {
console.log("get user");
token = authService.getToken();
userID = jwtHelper.decodeToken(token);
console.log(token);
console.log(userID);
return $http.get(httpHost + '/users/' + userID).success(function (data) {
user = data;
console.log(user);
return data;
});
},
我在.run of angular中运行这项服务
然后在我的控制器中我获取数据,以便在我的视图中显示用户的姓名
$scope.userName = userService.getFirstName() + " " + userService.getLastName();
。
它大部分时间都运行良好,但有时候,当获取用户时会出现延迟,控制器将首先执行,并使$ scope.username保留未定义的值。
如何使我的程序等待getUser()在运行控制器之前先返回用户的数据?
答案 0 :(得分:1)
$http.get
返回一个承诺。所以,无论何时拨打getUser
,都可以做到:
service.getUser().then(function(response){ //stuff you need to do on finish here });
答案 1 :(得分:0)
You need to use $q services
.ABCController($scope,$http,$q){
getUser : function () {
var deferred = $q.defer();
console.log("get user");
token = authService.getToken();
userID = jwtHelper.decodeToken(token);
console.log(token);
console.log(userID);
return $http.get(httpHost + '/users/' + userID).success(function (data) {
user = data;
console.log(user);
deferred.resolve(user)
return deferred.promise;
});
},