假设您在更改事件时执行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;
}
答案 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
。我不相信这比使用普通事件监听器模式更实用。