我正在使用Angular的$ http get,我想确认一个http请求被发送到我们的API。我知道.success方法,但这等待返回,有没有办法只获取$ http对象来确认请求已被发送?
答案 0 :(得分:0)
我使用类似跟踪发送请求的数量,等待响应。
在应用级别添加http拦截器:
.config(['$httpProvider',
function($httpProvider) {
$httpProvider.interceptors.push('RequestCounterInterceptor');
}
])
拦截器代码(您可以修改它以处理对API的URL的请求):
.factory('RequestCounterInterceptor', ['RequestCounterService', '$q',
function(RequestCounterService, $q) {
return {
'request': function(request) {
RequestCounterService.increase();
return request;
},
'requestError': function(request) {
RequestCounterService.increase();
return $q.reject(request);
},
'response': function(response) {
RequestCounterService.decrease();
return response;
},
'responseError': function(response) {
RequestCounterService.decrease();
return $q.reject(response);
}
};
}
])
服务:
.service('RequestCounterService', ['$log',
function($log) {
var currentRequestCount = 0; // init
return {
increase: function() {
currentRequestCount++;
$log.log("currentRequestCount ", currentRequestCount);
},
decrease: function() {
currentRequestCount--;
$log.log("currentRequestCount ", currentRequestCount);
},
getCount: function() {
return currentRequestCount;
}
};
}
])
然后在你的控制器,指令中的任何地方......你可以使用RequestCounterService.getCount()
查看已发送了多少请求但尚未收到响应。您可以向用户显示消息,例如There are currently XY requests being processed by the server
或类似内容。
但是如果处理过程需要花费太多时间,那么你应该像James Gaunt在评论中提出的那样解决你的服务器问题。