与变更事件AJAX使用承诺

问题描述:

说你在一个变化的事件,像这样执行一个Ajax请求:与变更事件AJAX使用承诺

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

现在,在客户端代码,你怎么可以附加到AJAX承诺的完成/失败/总是回调?

无法从Ajax请求返回的承诺,因为它只能在变化事件创建。

有没有办法可以提前创建一个承诺,告诉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; 
}  
+0

你正试图解决的用例和更高级别的问题是什么? – charlietfl

+0

还有其他的方法可以做到这一点,比如传递done/fail /总是作为参数,但看起来并不干净。看起来更倾向于面向对象,以承诺此代码的客户可以根据自己的完成/失败/始终关注而不必担心如何实现更改事件的绑定。 –

+0

但是,所以真的不明白为什么你想回到什么或什么的最终用途的情况将是 – charlietfl

可以使用承诺构造回调:

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。我不相信这比仅仅使用普通事件侦听器模式更实用。