Как отменить предыдущий запрос?AngularJS - PullRequest
0 голосов
/ 12 декабря 2018

У меня есть сетка с флажком фильтра.Когда я внесу изменения в этот фильтр, запрос будет отправлен на сервер и получит данные:

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

, если у вас есть файл обещания .рать (() => {}). затем (() => {}) и т. д. посмотрите по этой ссылке.

1 Ответ

0 голосов
/ 13 декабря 2018

Для решения смотрите в теле вопроса:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...