到目前为止,我的大部分http请求都是这样的。
控制器调用服务,然后调用then块
ConceptService.save(concept)
.then(function(res){
if(res.error){ throw new ErrorHandler(res.error)}
// handle response here
})
ConceptService像这样处理请求......
// ConceptService.save
function save(vocab){
var request = {
url: CONFIG.URL + 'conceptService/save',
method: 'PUT',
data: vocab
}
return $http(request)
.then(function(res){
return res;
})
.catch(function(err){
return err;
})
}
有时我会格式化从该服务中的服务器返回的数据
// ConceptService.getAllConceptContextType
function getAllConceptContextType(){
if(ConceptService.conceptContextTypes){
var deferred = $q.defer();
deferred.resolve(ConceptService.conceptContextTypes);
return deferred.promise;
}
var request = {
url: CONFIG.URL 'conceptService/getAllConceptContextType'
method: 'GET',
}
return $http(request)
.then(function(res){
var conceptContextTypes = new Object();
for(var i = 0; i < res.data.length; i++){
conceptContextTypes[res.data[i].id] = res.data[i].type;
}
ConceptService.conceptContextTypes = conceptContextTypes;
return conceptContextTypes;
})
.catch(function(err){
return err;
})
}
最近,我一直认为将这些http调用引导到中央服务可能会更好,而且我一直在尝试使用另一个名为HttpRequestHandler的服务注入ConceptService的代码,该服务处理实际请求所有调用并返回响应。它看起来像这样。
// ConceptService.save
function save(vocab){
var request = {
url: CONFIG.URL + 'conceptService/save',
method: 'PUT',
data: vocab
}
return HttpRequestHandler.handle(request)
.then(function(res){
//format data here if necessary
return res;
})
}
和HttpRequestHandler ......
// HttpRequestHandler.handle
function handle(request){
return $http(request)
.then(function(res){
return res.data;
})
.catch(function(err){
return err;
})
}
我想我只想得到任何人对这种模式,问题或潜在陷阱的反馈。我看到了几个好处。每个呼叫所需的过滤器和会话数据可以在一个地方添加/修改,并且错误将在一个地方被捕获。代码有点干净,我的一些服务中有很多方法。但是,我有点担心它可能会影响性能,而且这个设计可能还有其他负面因素,我并不十分清楚。任何对此有一定经验的人的任何建议或反馈都将不胜感激!