Как мне прервать HTTP-запросы, выполняемые Ember Data?

#ember.js #ember-data

#ember.js #ember-data

Вопрос:

У меня есть модель, которую необходимо обновлять (перезагружать) при определенных действиях пользователя. Если два из этих действий выполняются в быстрой последовательности, я бы хотел, чтобы первый запрос на обновление был прерван, потому что а) его результат устареет, и б) запрос занимает некоторое время (поэтому постановка этих запросов в очередь также не является вариантом).

Есть ли способ легко достичь этого с помощью Ember Data?

Ответ №1:

Я переопределил ajax-метод адаптера приложения, чтобы добавить объект XMLHttpRequest в массив.

 App.ApplicationAdapter = DS.RESTAdapter.extend({
  xhr: [],

  ajax: function(url, type, hash) {
    var adapter = this;

    return new Ember.RSVP.Promise(function(resolve, reject) {
      hash = adapter.ajaxOptions(url, type, hash);

      hash.success = function(json) {
        Ember.run(null, resolve, json);
      };

      hash.error = function(jqXHR, textStatus, errorThrown) {
        Ember.run(null, reject, adapter.ajaxError(jqXHR));
      };

      adapter.xhr.push(Ember.$.ajax(hash));
    }, "DS: RestAdapter#ajax "   type   " to "   url);
  },
});
  

Затем, когда я захочу прервать запрос (в данном случае, с маршрута):

 this.store.adapterFor('discussion').xhr.forEach(function(xhr) {xhr.abort();});