У меня есть сетка с флажком фильтра.Когда я внесу изменения в этот фильтр, запрос будет отправлен на сервер и получит данные:
$http({
url: this.myUrl,
params: query
});
Все хорошо, если я делаю изменения с нормальной скоростью, но если я делаю изменения очень очень быстро, много запросовбудет отправлено.В некоторых случаях возможно, что последний выполняется раньше, чем последний.
Чтобы избежать получения предыдущих данных для последнего вызова, я хочу отменить запрос, если я сделаю еще один.
LIKE:
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();
}
, если у вас есть файл обещания .рать (() => {}). затем (() => {}) и т. д. посмотрите по этой ссылке.