【问题标题】:How to cancel a previous request? AngularJS如何取消之前的请求? AngularJS
【发布时间】:2018-12-12 13:08:40
【问题描述】:

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

$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();
                }

如果您有 promise.then(()=>{}).then(() => {}) 等,请查看该链接。

【问题讨论】:

  • 不,因为如果请求将被执行,我想取消
  • 在提出请求之前我想取消以前的相同请求
  • 您希望用户在第一次请求成功后发出下一个请求吗?
  • 你需要全局暴露 var 请求并在执行 new 之前中止它

标签: javascript .net angularjs typescript


【解决方案1】:

在问题正文中查看解决方案:)

【讨论】:

    猜你喜欢
    • 2020-06-23
    • 1970-01-01
    • 1970-01-01
    • 2016-12-29
    • 2020-12-29
    • 2013-08-03
    • 2014-05-19
    • 2020-08-26
    • 2018-01-22
    相关资源
    最近更新 更多