在变更事件中使用带有ajax的promises

时间:2017-02-09 21:28:37

标签: javascript jquery ajax promise

假设您在更改事件时执行ajax请求,如下所示:

MyClass.prototype.bindChangeEvent = function(){
  $(document).on('change', '#elementid', function(){
    var $element = $(this);
    $.ajax({
      url: '/someurl'
    });
  });
}

现在,在客户端代码中,如何附加到ajax承诺完成/失败/总是回调?

您无法从ajax请求返回promise,因为它仅在change事件上创建。

有没有办法提前创建一个承诺并告诉jQuery使用该承诺来处理特定的ajax请求?

换句话说,有没有办法做类似的事情:

MyClass.prototype.bindChangeEvent = function(){
  var promise = new Promise;
  $(document).on('change', '#elementid', function(){
    var $element = $(this);
    $.ajax({
      url: '/someurl'
      promise: promise
    });
  });
return promise;
}    

1 个答案:

答案 0 :(得分:1)

您可以使用promise构造函数回调:

MyClass.prototype.bindChangeEvent = function(){
  var promise = new Promise(function (resolve, reject) {
    $(document).on('change', '#elementid', function(){
      var $element = $(this);
      $.ajax({
        url: '/someurl'
      }).then(resolve, reject);
    });
  });
  return promise;
}

但请注意,一旦承诺得到解决,它将不再有用于通知第二次更改,因此您必须在每次更改后创建新承诺,这意味着您必须致电再次bindChangeEvent。我不相信这比使用普通事件监听器模式更实用。