如何在 运行 angular 中的任何代码之前首先完成执行 $http.get

How to finish executing $http.get first before running any code in angular

我的服务中有这个方法来获取用户

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

我 运行 此服务位于 angular 的 .运行 然后在我的控制器中我获取数据以便在我的视图中显示用户名
$scope.userName = userService.getFirstName() + " " + userService.getLastName();
它在大多数情况下会 运行 很好,但有时当在获取用户方面出现延迟时,控制器将首先执行,从而使 $scope.username 具有未定义的值。
我怎样才能让我的程序在 运行 连接控制器之前先等待 getUser() return 用户数据??

$http.getreturns一个承诺。所以你可以做的是每当你调用 getUser 时做:

service.getUser().then(function(response){ //stuff you need to do on finish here });
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;
  });
  },