ユーザー向けのサービスを作成しようとしています。現在のユーザーを取得するためにリクエスト 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;
}
}
};
});
残念ながら、約束がすぐに解決されないため、リクエストを数回呼び出します。これを修正して、サーバーを確実に 1 回呼び出すにはどうすればよいですか。
そして、コントローラーからこの関数を呼び出す方法は、戻り値が約束である場合があるため、.then() を使用し、値 currentUser になる場合があるためです。