我正在寻找$http拦截器。我看到有requestError和responseError。
1)requestError和responseError有什么区别?
2)requestError在什么条件下触发?
答案 0 :(得分:1)
区别在于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}}要调用的处理程序。