如何中止Ember Data发出的HTTP请求?

时间:2014-07-07 09:34:53

标签: ember.js ember-data

我有一个必须在某些用户操作上更新(重新加载)的模型。如果其中两个动作快速连续发生,我希望第一个更新请求被中止,因为a)它的结果将过时,并且b)请求需要一些时间(因此排队这些请求是也不是一种选择。

有没有办法通过Ember Data轻松实现这一目标?

1 个答案:

答案 0 :(得分: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();});