javascript – 使用$http拦截器重试请求

我相信有一个简单的方法来做我想要的,我只是不能包围我的头。如何让http拦截器有角度重试请求,如果失败?我想我会在请求中建立某种承诺吗?那么在回应中,我必须检查答复是否是错误,如果是这样,那么承诺呢?怎么做?我一直在试图调整这个例子:http://docs.angularjs.org/api/ng.$http

我试图使用拦截器的原因是因为我需要向请求url添加令牌和其他一些东西,以及处理xdr的一些事情。

这是一个$ http拦截器,(立即)重播超时请求(即响应状态0)。构建这个例子有两个不明显的(对我的)元素:

>如何从拦截器内调用$ http – 只需将$ http添加到依赖关系列表中就不会像循环依赖关系
>如何从响应对象引用原始请求以重试它

This answer处理这两个主题,但更多的涉及,所以我包括一个简化的版本下面。

joinApp.factory('httpResponseErrorInterceptor',function($q, $injector) {
  return {
    'responseError': function(response) {
      if (response.status === 0) {
        // should retry
        var $http = $injector.get('$http');
        return $http(response.config);
      }
      // give up
      return $q.reject(response);
    }
  };
});

joinApp.config(function($httpProvider) {
  $httpProvider.interceptors.push('httpResponseErrorInterceptor');
});

在实际实现中,您可能需要更复杂的HTTP响应代码处理,重试次数的限制等。

http://stackoverflow.com/questions/20075674/retry-request-with-http-interceptor

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:javascript – 使用$http拦截器重试请求