Javascript 为angularjs http请求创建自定义处理程序
到目前为止,我的大多数http请求都是这样的Javascript 为angularjs http请求创建自定义处理程序,javascript,angularjs,angular-services,angular-http,angular-http-interceptors,Javascript,Angularjs,Angular Services,Angular Http,Angular Http Interceptors,到目前为止,我的大多数http请求都是这样的 // ConceptService.save function save(vocab){ var request = { url: CONFIG.URL + 'conceptService/save', method: 'PUT', data: vocab } return HttpRequestHandler.handle(
// 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;
})
}
控制器调用服务,然后调用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;
})
}
和HttpRequestHandler
// HttpRequestHandler.handle
function handle(request){
return $http(request)
.then(function(res){
return res.data;
})
.catch(function(err){
return err;
})
}
我想我只是想得到任何人对这种模式、问题或潜在陷阱的反馈。我看到了一些好处。每次呼叫所需的筛选器和会话数据可以在一个位置添加/修改,错误将在一个位置捕获。代码比较干净,在我的一些服务中有很多方法。然而,我有点担心它可能会影响性能,而且这种设计可能还有其他负面的方面,我不是很清楚。任何对此有良好经验的人的任何建议或反馈都将不胜感激 已经准备好进行错误处理和其他操作,您将从HttpRequestHandler.handle获得什么好处?@Satpal是的,实际上我已经在使用拦截器进行全局错误处理。每个请求不应该实现一个catch块吗?或者如果我使用的是拦截器,我可以从服务中删除catch块吗?@Satpal如果我不需要在每个不同的请求中重写catch块,例如
return-HttpRequestHandler.handle(请求),代码就少一点
如果数据在返回控制器之前不需要格式化就足够了。我想管理每个调用发送的配置也可以在这里完成,尽管我知道它也可以在拦截器的请求块中完成。。。