我正在處理大量惰性數據加載的應用程序。我想優先考慮基於'優先'參數的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