任何添加本地拦截器的方法(仅限一个请求)

时间:2016-05-27 10:30:38

标签: angularjs

有没有办法只添加特定于一个特定请求的拦截器,比如transformRespponse?

这样做将添加将在每个请求上执行的全局拦截器。

$httpProvider.interceptors.push(function($q) {
  return { 
    'response': function(response) {
       if (isBad(response)) {
           return $q.reject(rejectionReason(response));
       }
    }
  };
});

2 个答案:

答案 0 :(得分:0)

我认为你过度设计解决方案。 $http已经通过两次回调返回了承诺

$http.get('your_url').then(onSuccess, onError)

function onSuccess (response) {
  if (isBad(response)) {
       return $q.reject(rejectionReason(response));
   }
   // do some magic
}
function onError(response){
  return $q.reject(rejectionReason(response))
}

实际上isBad可能应该发生在服务器端并返回一个http错误,因此它由onError

处理

答案 1 :(得分:0)

你可以在响应函数中获取请求url

$httpProvider.interceptors.push(function($q) {
  return { 
    'response': function(response) {
       if(response.config.url == '/particular_request_url'){
           //do something
       }
       return response
    }
  };
});