如何在 运行 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.get
returns一个承诺。所以你可以做的是每当你调用 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;
});
},
我的服务中有这个方法来获取用户
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.get
returns一个承诺。所以你可以做的是每当你调用 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;
});
},