0
我记得在堆栈溢出时看到很多次将角度$ 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