Я помню, что много раз на стеке переполняла рекомендацию делегировать угловые $ 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?
Спасибо! Итак, если я использовал функцию для вызова той, которую вы предоставили, если данные были возвращены из функции catch, вызывающая функция не знала бы, чтобы отличить ее от правильного права ответа? Кажется, я однажды попробовал это, и вот что случилось. Это то, что вы подразумеваете под «обещанием анти-шаблона»? – claireablani
Да, это было бы, потому что функция catch возвращает отклоненное обещание. Первый фрагмент эквивалентен вашему. –
Так что мне пришло в голову, что, может быть, причина, по которой ваша функция $ http в службе вместо контроллера состоит в том, что десятки экземпляров контроллера могут быть созданы на странице, но служба создается только один раз? – claireablani