Я работаю над приложением с большим количеством ленивых данных. Я хотел бы определить приоритеты http-запросов на основе параметра «priority».
Это концепция его использования.
$http.get(url, {params: query, priority: 1})
Я думал об использовании перехватчиков $ http. Что-то вроде этого:
angular.module('myModule')
.factory('httpPriorityInterceptor', function ($interval, $q) {
var requestStack = [];
return {
request: function (config) {
config.priority = config.priority || 3;
requestStack.push(config);
requestStack.sort(sortByPriority);
if (isFirstToGo(item)) return requestStack.pop();
deferred = $q.defer();
var intervalPromise = $interval(function(){
if (isFirstToGo(item)) {
deferred.resolve(requestStack.pop());
$interval.cancel(intervalPromise);
};
}, 100);
return deferred.promise;
}
};
});
Но я не могу вернуть обещание здесь. Есть идеи?
Это тип решения, которое я искал. Я постараюсь его реализовать. Благодаря! – krystiangw
ryeballar Мне понравился ваш ответ, но обещания, которые вы поместили в стек запроса после копирования, похоже, не выполняют ранее обещанный код. На самом деле более элегантным решением было бы отложить выполнение в том месте, где вы размещаете свой запрос в стеке, но я не могу найти хороший способ сделать это. –
Можете ли вы предоставить эквивалент plnkr или или jsfiddle для такого случая? – ryeballar