HTTP请求错误与响应错误

时间:2016-05-09 17:15:40

标签: javascript angularjs http

我正在寻找$http拦截器。我看到有requestError和responseError。

1)requestError和responseError有什么区别?
2)requestError在什么条件下触发?

3 个答案:

答案 0 :(得分:1)

你应该看看这个 https://en.wikipedia.org/wiki/List_of_HTTP_status_codes

区别在于requestError意味着您的请求无法处理,也许您的网址出错或服务器不可用

它与http状态代码相关的responseError,你到达服务器,但可能有问题,例如它可能是一个错误的请求会回答你,但它可能是一个空的响应与代码 204无内容

答案 1 :(得分:1)

请求错误是一个未满足条件的错误,缺少在script有效负载丢失等服务器上查找资源所需的参数

响应错误是服务器根据请求发送的错误,如header未找到页面是响应错误

答案 2 :(得分:0)

请求错误和响应错误之间的主要区别在于它们在拦截器构建的promise链中的顺序。看一下这个source code

// apply interceptors
  forEach(reversedInterceptors, function(interceptor) {
    if (interceptor.request || interceptor.requestError) {
      chain.unshift(interceptor.request, interceptor.requestError);
    }
    if (interceptor.response || interceptor.responseError) {
      chain.push(interceptor.response, interceptor.responseError);
    }
  });

  while (chain.length) {
    var thenFn = chain.shift();
    var rejectFn = chain.shift();

    promise = promise.then(thenFn, rejectFn);
  }

所以你看到,对于提供所有四种方法的拦截器,你会得到这样的承诺:

promise.then(requestFn, requestErrorFn).then(responseFn, responseErrorFn)

要回答2.承诺是在初始化请求后由var promise = $q.when(config);创建的。乍一看,它确实有点毛茸茸,但配置对象似乎有一些默认的回调。我认为如果实际的请求语法/配置有问题,或者角遇到发送请求的问题(可能没有网络可用或类似的东西),那么原始的promise将被解析为被拒绝,这将导致{{ 1}}要调用的处理程序。