بادئ ذي بدء ، كما ذكر Nordyke في إجابته ، من الأفضل أن تقسم الخدمة إلى أصغر.
ثانياً ، أنت تسأل عن كيفية تخزين البيانات ، وبما أنك تستخدم الوعد ، $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) {
...
});
سوف يجلب فقط معلومات النظام الأساسي مرة واحدة خلال فترة حياة خدمة البيانات. يمكنك تطبيق نفس الفكرة على getServerData
وكذلك لتخزين البيانات من الخادم.