首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >HTTPInterceptor in AngularJS

HTTPInterceptor in AngularJS
EN

Stack Overflow用户
提问于 2014-10-21 03:14:22
回答 1查看 63关注 0票数 1

我们有API,它在响应XML中返回错误,而不是拒绝它们并发送错误响应。所以我有下面的代码来处理,

代码语言:javascript
复制
                $http({
                    url: apiURL,
                    method: "POST",
                    data: req,
                    headers: oHeaders,
                    dataType: "xml",
                })
                .success(function(data,status) {
                    console.log('success!!!!!');
                    deff.resolve(data);
                })
                .error(function(data,status) {
                    console.log('This is what I want to see!!!!!');
                    deff.reject(data);
                });


myApp.factory('customHttpInterceptor', ['$q', function ($q) {
    return function (promise) {
        return promise.then(function (response) {
            var parsed;
            if (response.config.dataType == 'xml'){
                parsed = $.xml2json(response.data);
                if (parsed) {
                    angular.forEach(parsed, function(v, k) {
                        if (k == 'status') { 
                            if (v.APIErrors) {
                                return $q.reject(response);
                            }     
                        }                          
                    });                     
                }
                console.log(parsed);
            }   
            return response;
        }, function (errResponse) {
            // do something on error
            console.log('Error section in interceptor');
            return $q.reject(errResponse);
        });
    };
}]);    

我期望得到的是,当在拦截器内发现错误时,它将拒绝承诺,而控件将进入$http的错误部分并记录“这就是我想看到的!”消息。而是展示“成功!”消息。

这是工作方式还是我做错了什么?

伊什

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-10-21 04:30:53

我在这里看到了几件似乎不对劲的事情:

forEach中返回结果的

代码语言:javascript
复制
angular.forEach(parsed, function(v, k) {
  if (k == 'status') {
    if (v.APIErrors) {
      return $q.reject(response);
    }
  }
});

您编写这篇文章可能是因为您习惯于将return语句放入for循环中。这在这里不起作用,因为您是从函数体内部返回的。从不使用任何在forEach body函数中返回某些内容的理由:这个值不会被任何东西使用。

角拦截器API

也许您只是没有在代码中显示它,但是您必须注册您的拦截器。

代码语言:javascript
复制
$httpProvider.interceptors.push('customHttpInterceptor');

更重要的是,您的拦截器没有正确的形式:在您的示例中,它应该是一个具有response方法的对象,它将从响应返回响应的承诺。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26478298

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档