Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为angularjs http请求创建自定义处理程序_Javascript_Angularjs_Angular Services_Angular Http_Angular Http Interceptors - Fatal编程技术网

Javascript 为angularjs 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(

到目前为止,我的大多数http请求都是这样的

// 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(请求),代码就少一点
如果数据在返回控制器之前不需要格式化就足够了。我想管理每个调用发送的配置也可以在这里完成,尽管我知道它也可以在拦截器的请求块中完成。。。