Я использую угловую версию 1.4.5 и пытаюсь прервать ожидающие вызовы API, если тот же вызов снова вызывается здесь, в коде
ожидающий запрос.js
angular.module('projectName') .service('pendingRequests', function() {
var pending = [];
this.get = function() {
return pending;
};
this.add = function(request) {
pending.push(request);
};
this.remove = function(request) {
pending = _.filter(pending, function(p) {
return p.url !== request;
});
};
this.cancelAll = function() {
angular.forEach(pending, function(p) {
p.canceller.resolve();
});
pending.length = 0;
};
})
Служба, где я вызываю API
getFeasibilityV2:
function(data) {
const url = `${feasibility_url}/feasibility/v2?summary=2`;
var canceller = $q.defer();
const pendingCalls = pendingRequests.get();
if(pendingCalls && pendingCalls.length) {
angular.forEach(pendingCalls, function (p) {
p.canceller.reject();
});
canceller.resolve()
pendingRequests.cancelAll();
}
pendingRequests.add({
url: url,
canceller: canceller
});
//Request gets cancelled if the timeout-promise is resolved
var requestPromise = $http.post(url,data, { timeout: canceller.promise });
//Once a request has failed or succeeded, remove it from the pending list
requestPromise.finally(function() {
pendingRequests.remove(url);
});
return requestPromise;
},
Это две службы, и я вызываю эту службу с контроллера, но все еще не могу прервать ожидающие вызовы
Я должен следовать по этой ссылке
http://plnkr.co/edit/joznNY8WhWXEyIHp7k26?p=preview
0
Pramod Nagar
20 Дек 2019 в 11:13
1 ответ
Чтобы отменить все предыдущие запросы с тем же URL:
getFeasibilityV2:
function(data) {
const url = `${feasibility_url}/feasibility/v2?summary=2`;
var canceller = $q.defer();
const pendingCalls = pendingRequests.get();
//find and cancel previous requests
var previous = pendingCalls.filter(_ => _.url == url);
previous.forEach(_ => {
_.canceller.resolve();
pendingRequests.remove(_.url);
});
pendingRequests.add({
url: url,
canceller: canceller
});
//Request gets cancelled if the timeout-promise is resolved
var requestPromise = $http.post(url,data, { timeout: canceller.promise });
//Once a request has failed or succeeded, remove it from the pending list
requestPromise.finally(function() {
pendingRequests.remove(url);
});
return requestPromise;
},
0
georgeawg
20 Дек 2019 в 20:38
Похожие вопросы
Новые вопросы
angularjs
Используйте для вопросов об AngularJS (1.x), JavaScript-фреймворке с открытым исходным кодом. НЕ используйте этот тег для Angular 2 или более поздних версий; вместо этого используйте тег [angular].