我有一个带有复选框过滤器的网格。当我对该过滤器进行更改时,请求将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();
}
}
========解决方案========
您需要一个全局变量:
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();
}
如果您有诺言,那么请看一下该链接。然后再看一下该链接。
答案 0 :(得分:0)
有关解决方案,请查看问题正文:)