HTTP-запросы AngularJs и http-перехватчики - PullRequest
1 голос
/ 07 июня 2019

Я смотрел на приложение, которое я сделал некоторое время назад, и есть определенная страница, где детали загружаются в последний раз. Из-за этого он, кажется, ставит запрос в очередь (перед ним более 6 других), и это приводит к замедлению страницы.

Я подумал, что смогу найти решение для расстановки приоритетов этих запросов, и нашел это:

Как расставить приоритеты запросов в службе $ http?

Итак, я создал свою версию и добавил ее к моим перехватчикам:

// Add our auth interceptor to handle authenticated requests
$httpProvider.interceptors.push('authInterceptor');
$httpProvider.interceptors.push('httpPriorityInterceptor');

Перехватчик выглядит так:

function factory($injector, $q) {
    var requestStack = [], // request stack
        $http = null; // http service to be lazy loaded

    return {
        request: request,
        responseError: responseError
    };

    //////////////////////////////////////////////////

    function request(config) {
        // Lazy load $http service
        if (!$http) {
            $http = $injector.get('$http');
        }

        if (!config.hasBeenRequested) {
            config.hasBeenRequested = true;
            config.priority = config.priority || 3;

            console.log(config);

            // add a copy of the configuration
            // to prevent it from copying the timeout property
            requestStack.push(angular.copy(config));

            // sort each configuration by priority
            requestStack = requestStack.sort(sort);

            // cancel request by adding a resolved promise
            config.timeout = $q.when();
        }

        // return config
        return config;
    }

    function responseError(rejection) {
        // check if there are requests to be processed
        if (requestStack.length > 0) {
            requestStack.reduceRight(function(promise, config) {
                return promise.finally(function() {
                    return $http(config);
                });
            }, $q.when());

            requestStack.length = 0;
        }

        // return rejected request
        return $q.reject(rejection);
    }

    //////////////////////////////////////////////////

    function sort(config1, config2) {
        return config1.priority < config2.priority;
    }
}

Проблема в том, что, похоже, он также перехватывает запросы шаблонов. У меня нет проблем с этим, но они не решаются. Вместо этого я получаю много ошибок:

Ошибка: [$ templateRequest: tpload] Не удалось загрузить шаблон: app / accounts / accounts.html (статус HTTP: -1)

Кто-нибудь сталкивался с этим раньше? Что я могу сделать, чтобы это исправить?

1 Ответ

1 голос
/ 18 июня 2019

вы должны знать, что каждый запрос, такой как html-файлы, css-файл и ... поступает в перехватчик. в вашем случае вам не нужно расставлять приоритеты для этих файлов. так что вы можете отфильтровать ваш запрос как:

if (config.url.toString().toLowerCase().includes("api")) {
    //place your functionality
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...