仅显示超过x ms的请求的加载程序

时间:2016-04-07 08:01:24

标签: angularjs http

我有一个加载程序,但我只想显示这个加载程序,以获取比例如路由开关花费更多时间的请求。所以我想启动一个计时器或类似的东西来查看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一段时间后计算请求并显示加载程序?

0 个答案:

没有答案