与变更事件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;
}
答
可以使用承诺构造回调:
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
。我不相信这比仅仅使用普通事件侦听器模式更实用。
你正试图解决的用例和更高级别的问题是什么? – charlietfl
还有其他的方法可以做到这一点,比如传递done/fail /总是作为参数,但看起来并不干净。看起来更倾向于面向对象,以承诺此代码的客户可以根据自己的完成/失败/始终关注而不必担心如何实现更改事件的绑定。 –
但是,所以真的不明白为什么你想回到什么或什么的最终用途的情况将是 – charlietfl