Tout d'abord, comme Nordyke l'a mentionné dans sa réponse, vous feriez mieux de diviser le service à des plus petits.
Deuxièmement, vous demandez comment mettre en cache les données, et puisque vous utilisez Promise, $q.when()
est ce dont vous avez besoin. Je vais prendre le getPlatform
À titre d'exemple pour vous aider à démarrer:
.factory('DataService', function($http, $q, $timeout) {
var os; // this variable is used to store the result
return {
getPlatform: function() {
var getPlatformData = function() {
if (!os) { // no previous data available, look into other service to fetch the data
var deferred = $q.defer();
BrowserDetect.init();
os = BrowserDetect.OS; // store data
deferred.resolve(os);
return deferred.promise;
}
return $q.when(os); // there is previous data, return it as promise
};
return {
getPlatformData: getPlatformData
};
}
};
});
De cette façon, les informations sur le système d'exploitation sont mises en cache, et
DataService.getPlatform().getPlatformData().then(function(platform) {
...
});
ne rapportera les informations de la plate-forme qu'une seule fois pendant la durée de vie du service de données. Vous pouvez appliquer la même idée à getServerData
ainsi pour mettre en cache les données du serveur.