Я хотел бы упростить следующий код AngularJs
, и в частности методи promise
.
Я видел в блоге несколько примеров неправильного использования $q.defer()
here, и был бы признателен за ваш ввод и советы по переписыванию моего кода ниже, чтобы соответствовать этому более простому методу.
Это пример из блога:
Это:
var defer = $q.defer(); $http.get('options.json').success(function(result) { defer.resolve(result); }); return defer.promise;
может быть изменен на:
return $http.get('options.json').then(function(response) { return response.data; });
Ниже 3 функции (назовем его "стадии" для этого примера) из 3-х различных услуг, чтобы вернуть соответствующие данные:
1-й этап: SocialMediaUserService
this.checkSocialMediaSubscription = function() {
var isSubscribed = $q.defer();
GetUserAccessService.returnBrandProfileID().then(function (brandProfileID) {
if (brandProfileID === 0) {
isSubscribed.resolve(false);
}
else {
isSubscribed.resolve(true);
}
});
return isSubscribed.promise;
};
Этап 2: GetUserAccessService
this.returnBrandProfileID = function() {
var brandProfileID = $q.defer();
if (angular.isUndefined($sessionStorage.brandProfileID)) {
GetDataService.getItems('GetUserAccess/' + $cookies.get('authenticationID'))
.success(function (accessObject) {
$sessionStorage.brandProfileID = accessObject.FusewareID;
brandProfileID.resolve(accessObject.FusewareID);
})
.error(function (error, status) {
console.error('Fuseware API error: ' + error + ' Status message: ' + status);
});
}
else {
brandProfileID.resolve($sessionStorage.brandProfileID);
}
return brandProfileID.promise;
};
Этап 3: GetDataS е р в
.factory('GetDataService', ['$http', 'WebServiceURL', function ($http, WebServiceURL) {
var DataFactory = {};
DataFactory.getItems = function (ServiceParameter) {
console.log(WebServiceURL + '/' + ServiceParameter);
return $http.get(WebServiceURL + '/' + ServiceParameter, { cache: true });
};
return DataFactory;
}
В дополнение к тому, что Тоби уже сказал, вы можете проверить некоторые библиотеки, которые помогут вам с целыми обещаниями, такими как: https://github.com/kriskowal/q или https://github.com/petkaantonov/bluebird –
Спасибо за ссылку! – onmyway