我有一个加载程序,但我只想显示这个加载程序,以获取比例如路由开关花费更多时间的请求。所以我想启动一个计时器或类似的东西来查看x
ms是否已经过去,如果它经过了那个时间,那么就显示加载器。
我正在使用这个http拦截器来检查请求:
core.factory('httpInterceptor', ['$q', '$timeout', 'globalStates', function ($q, $timeout, globalStates) {
var xhrCreations = 0,
xhrResolutions = 0;
function isLoading() {
return xhrResolutions < xhrCreations;
}
return {
request: function (req) {
xhrCreations++;
$timeout(function() {
globalStates.set('isRequestActive', isLoading());
}, 500);
return req;
},
requestError: function (err) {
xhrResolutions++;
$timeout(function() {
globalStates.set('isRequestActive', isLoading());
}, 500);
return $q.reject(err);
},
response: function (res) {
xhrResolutions++;
$timeout(function() {
globalStates.set('isRequestActive', isLoading());
}, 500);
return res;
},
responseError: function (err) {
xhrResolutions++;
$timeout(function() {
globalStates.set('isRequestActive', isLoading());
}, 500);
return $q.reject(err);
}
};
}]);
正如您所看到的,我在设置500ms
之前添加了等待isRequestActive
的超时,但这种方法有效但并非总是如此。如果我在视图之间快速切换,那么加载器会闪烁一点,所以这个解决方案远非可选。
如何在x
一段时间后计算请求并显示加载程序?