Я напоминаю, что много раз на стеке переполняла рекомендацию делегировать угловые $ http-вызовы сервисам, а не делать это в контроллерах. Я вижу чистоту этого, когда кто-то хочет, чтобы служба каким-то образом модифицировала объект ответа, прежде чем передать его обратно контроллеру.
Однако, если нет необходимости изменять ответ? Кажется излишним использовать функцию в контроллере для вызова службы для возврата $ http-запроса в этом случае. Есть ли еще одна причина, по которой я мог бы узнать о том, чтобы зарезервировать $ http-вызовы для сервисов, а не контроллеров?
например
// in controller
function potatoChipTime() {
chip = chipService.getAPotatoChip();
}
// in service (inject $q and $http)
var service = {
getAPotatoChip: getAPotatoChip
}
return service;
function getAPotatoChip() {
var deferred = $q.defer();
$http.get(url)
.success(function(response) {
deferred.resolve(response);
)}.error(function(error) {
deferred.reject(error)
});
return deferred.promise;
}
// redundant, no? a lot of fuss to get a potato chip?
Я с тобой согласен. Обычно я только добавляю такой код в службу, если служба повторно используется в нескольких контроллерах, и если она делает больше, чем просто делает HTTP-запрос.
Обратите внимание, что ваш код обслуживания не использует цепочку обещаний и, таким образом, использует анти-шаблон. Все, что вам нужно, это
function getAPotatoChip() {
return $http.get(url).then(function(response) {
return response.data;
}).catch(function(response) {
return $q.reject(response.data);
});
}
или, если вам все равно, отклонено ли обещание с данными или с полным ответом в случае ошибки:
function getAPotatoChip() {
return $http.get(url).then(function(response) {
return response.data;
});
}