【发布时间】:2017-05-24 12:57:06
【问题描述】:
我正在开发一个应用程序,如果 过了一定时间,我必须停止收听请求,例如,如果在 60 秒内没有来自请求的响应,那么我必须 中止该请求,并且一次有多个请求正在进行。我不知道如何使用中止时间(60 秒) 来跟踪每个请求。我的意思是我怎么知道要中止哪个请求。
我想在我的 AngularJS 拦截器中实现这个功能。我尝试了许多声称可以实现此功能的博客和帖子,但没有任何帮助
这是我的拦截器代码
$httpProvider.interceptors.push(['$cookies', '$rootScope', '$q', '$localStorage', '$sessionStorage','$timeout', function ($cookies, $rootScope, $q, $localStorage, $sessionStorage, $timeout) {
return {
'request': function (config) {
config.headers = config.headers || {};
if (typeof config.data !== 'object') {
config.headers['Content-Type'] = 'application/x-www-form-urlencoded';
}
config.headers.Accept = 'application/json;odata=verbose';
config.headers['X-Requested-With'] = 'XMLHttpRequest';
var token = $localStorage.authToken || $sessionStorage.authToken;
if (token) {
config.headers.Authorization = 'Bearer ' + token;
}
return config;
},
'responseError': function (response) {
var status = response.status;
var error = '';
if(response.data.error) {
error = response.data.error;
}
if(status === 401) {
$rootScope.unauthorizedLogout();
} else if(status === 400 && (error === 'token_invalid' || error === 'token_not_provided')) {
$rootScope.unauthorizedLogout();
}
return $q.reject(response);
}
};
}]);
我确实尝试了$q.defer,它是取消请求的解决方法,但它并没有帮助我在应用程序中实现我想要的功能。
和平相处V
【问题讨论】:
-
这个答案对你有帮助吗? stackoverflow.com/a/17328336/3337164
-
是的,我试过了。
标签: angularjs http xmlhttprequest interceptor abort