i need some async data in a directive
, this directive is repeated, so, when the app starts, each directive
call the service data but because there is still no cached data, the $http
is executed many times.
i added a promise inside the service and tried to return it instead of a new one. it seemed to work but i don't know if it is a good idea ?
angular.module('test')
.service('Users', function($q, $http) {
var api = 'api';
var cached = [];
var localPromise;
var _getAll = function() {
if (localPromise) {
return localPromise;
}
var deferred = $q.defer();
if (cached.length > 0) {
deferred.resolve(cached);
localPromise = null;
return deferred.promise;
}
var url = api + '/users';
$http.get(url).then(function(data) {
cached = data.data;
deferred.resolve(cached);
localPromise = null;
}, function(err) {
deferred.reject(err);
localPromise = null;
});
localPromise = deferred.promise;
return deferred.promise;
}
return {
getAll: _getAll
}
});