【发布时间】: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();
}
}
========解决方案=========
你需要一个全局变量:
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