Я использую угловую версию 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