首先,正如Nordyke在答案中提到的那样,您最好将服务分配给较小的服务。
其次,您正在询问如何缓存数据,并且由于您使用了Promise, $q.when()
是您需要的。我会接受 getPlatform
作为让您开始的一个例子:
.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
};
}
};
});
通过这种方式,操作系统的信息被缓存,并且
DataService.getPlatform().getPlatformData().then(function(platform) {
...
});
在DataService的终生期间,只会获取一次平台信息。您可以将相同的想法应用于 getServerData
以及从服务器中缓存数据。