如何在以角度运行任何代码之前先完成$ http.get的执行

时间:2015-06-07 04:04:59

标签: angularjs angular-http

我在我的服务中使用此方法来获取用户

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()在运行控制器之前先返回用户的数据?

2 个答案:

答案 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;
  });
  },