При построении сервисного слоя в приложении с угловым я заметил, что много повторений кода для создания обещаний поэтому попыталось сделать общий сервис getPromise, поскольку 90% обещаний - это одна и та же структура.Generic Angular Promise Service
Хотя, возвращая обещание от службы, функция не выполняется в обычном режиме, даже если возвращаемый объект тот же.
Неужели кто-то пытался это сделать? Например.
angular.module('fooApp')
.service('promise', function promise($q, $http) {
return {
getPromise: function (url, data) {
var deferred = $q.defer();
$http.post(url, data)
.success(function (data) {
deferred.resolve(data);
})
.error(function (error) {
deferred.reject(error);
});
return deferred.promise;
}
};
})
.service('foo', function foo(config, promise) {
return {
getFoo: function (userId) {
var deferred = $q.defer();
var url = config.svcUser + 'GetFoo';
var data {
userId: userId
};
$http.post(url, data)
.success(function (data) {
deferred.resolve(data);
})
.error(function (error) {
deferred.reject(error);
});
return deferred.promise;
},
getFoo2: function (userId) {
var url = config.svcUser + 'GetFoo';
var data {
userId: userId
};
return promise.getPromise(url, data);
}
}
})
.controller('AgenciesCtrl', function ($scope, agency) {
agency.getFoo().then(function (agencies) {
// does fire
});
agency.getFoo2().then(function (foo) {
// does not fire
});
$scope.loadAgency = function (agencyId) {
agency.getFullAgencyProfile(agencyId).then(function (agency) {
$scope.agency = agency;
});
}
});
вопрос кажется довольно легким в этом маленьком примере, но я планирую по реализации 30+ услуг, с тем, что позволит сократить повторения кода много, если это возможно.
Я вижу это все время, как сказал @MaxFichtelmann '$ http.post' возвращает обещание, нет необходимости, чтобы обернуть его с' $ q' I» Я не знаю, почему люди этого не понимают. Также хорошая идея с сервисом обернуть код X с обещанием, но вы уже можете сделать это с помощью '$ q.when (...) '= * Обертывает объект, который может быть значением или (сторонним), тогда можно обещать в обещание $ q * –
Я думаю (и именно по этой причине я удалил свой оригинальный комментарий), что причина заключается в том, чтобы сгладить ответ и отбрасывать информацию о статусе и заголовках. Но предоставление этой другой мысли кажется плохой идеей для себя, потому что отказ от статуса ошибок может быстро стать огромной проблемой. –