gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 23:06:02 24 4
gpt4 key购买 nike

我确信有一种简单的方法可以做我想做的事,但我只是无法理解它。如果失败,如何让 http 拦截器以 Angular 方式重试请求?我想我必须在请求中做出某种 promise ,对吗?然后在响应中我必须检查响应是否有错误,如果是,是否执行 promise ?这是怎么做到的?我一直在尝试调整这里的示例:http://docs.angularjs.org/api/ng.$http

我尝试使用拦截器的原因是因为我需要将 token 和其他一些内容添加到请求网址,以及一些处理 xdr 的内容。

最佳答案

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

  1. 如何从拦截器中调用 $http - 简单地将 $http 添加到依赖项列表中并不起作用,因为 Angular 提示循环依赖项
  2. 如何从响应对象引用原始请求以便重试

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 响应代码处理、重试次数限制等。

关于javascript - 使用 $http 拦截器重试请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20075674/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com