Primeiro de tudo, como Nordyke mencionou em sua resposta, é melhor dividir o serviço aos menores.
Segundo, você está pedindo como armazenar em cache os dados e, como você está usando promessa, $q.when()
é o que você precisa. Vou levar o getPlatform
Como exemplo para você começar:
.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
};
}
};
});
Dessa forma, as informações do sistema operacional são armazenadas em cache e
DataService.getPlatform().getPlatformData().then(function(platform) {
...
});
Só buscará as informações da plataforma uma vez durante a vida útil do DataService. Você pode aplicar a mesma ideia a getServerData
também para armazenar em cache os dados do servidor.