我尝试为我的用户创建服务。我使用请求 http 来获取当前用户。为了避免每次调用 userService.getCurrentUser() 时都调用我的服务器,如果请求已经发送,我尝试发送一个变量,或者如果是第一次调用服务器。
这是我的服务:
angular.module('UserService', [])
.factory('UserService', function($q , $http, $rootScope,$timeout) {
var currentUser = null;
return {
getCurrentUser: function() {
if (currentUser == null){
var config = {};
config.cache = true;
config.method = "GET";
config.url = "users/get_current_user";
return $http(config)
.then(function(response) {
if (typeof response.data === 'object') {
currentUser = response.data.user;
return response.data.user;
} else {
// invalid response
return $q.reject(response.data);
}
}, function(response) {
// something went wrong
return $q.reject(response.data);
});
}
else{
return currentUser;
}
}
};
});
不幸的是,我几次致电我的请求,因为承诺没有立即得到解决。如何解决此问题以确保调用我的服务器一次。
以及如何从我的控制器调用此函数,因为有时返回值是一个承诺,所以我使用 .then() 有时它将是 currentUser 的值。