如何取消上一个请求? AngularJS

时间:2018-12-12 13:08:40

标签: javascript .net angularjs typescript

我有一个带有复选框过滤器的网格。当我对该过滤器进行更改时,请求将pe发送到服务器并获取数据:

$http({
    url: this.myUrl,
    params: query
});

如果我以正常速度进行更改,那么一切都很好,但是如果我非常非常快地进行更改,则会发送很多请求。在某些情况下,最后一个可能在最后一个执行之前执行。

为避免获取上一次通话的先前数据,如果要再执行一次,我想取消请求。

喜欢:

function makeRequest(){
  var request = $http({
        url: this.myUrl,
        params: query
    });

  request.then(({data})=> //do something with data);
}

function program(){
  on('filterChanged') => {
      abortPreviousPendingRequests();  // how to do that? but only for that url!
      makeRequest();
  }
}

========解决方案========

get logics from here

您需要一个全局变量:

var promise;

function fetchRequest(query) {
                    const canceller = $q.defer();

                    promise = $http({
                        url: that.yourURL,
                        params: query,
                        timeout: canceller.promise
                    });

                    promise.cancel = () => {
                        canceller.resolve();
                    };
            }

在调用fetchRequest(query)之前;您可以这样做:

function cancelPreviousRequest() {
                    if (!promise) {
                        return;
                    }

                    promise.cancel();
                }

如果您有诺言,那么请看一下该链接。然后再看一下该链接。

1 个答案:

答案 0 :(得分:0)

有关解决方案,请查看问题正文:)