我正在处理大量惰性数据加载的应用程序。我想优先考虑基于'优先'参数的http请求。
这是使用它的概念。
$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 2015-02-11 20:31:11
ryeballar我喜欢你的答案,但你放在请求堆栈中的诺言一旦复制似乎不会执行先前承诺的代码。真正的更优雅的解决方案是在您将请求放入堆栈的时候推迟执行,但我找不到一个好的方法来执行此操作。 – 2015-11-04 10:13:44
你能提供一个等效的plnkr或者或者jsfiddle这种情况吗? – ryeballar 2015-11-05 02:45:42