【发布时间】:2015-12-06 10:54:46
【问题描述】:
我正在构建一个表单验证并学习 Promise,我决定使用 Promise 模式实现异步验证功能:
var validateAjax = function(value) {
return new Promise(function(resolve, reject) {
$.ajax('data.json', {data: {value: value}}).success(function(data, status, xhr) {
if (data.valid) {
resolve(xhr)
}
else {
reject(data.message)
}
}).error(function(xhr, textStatus) {
reject(textStatus)
})
})
}
//...
var validators = [validateAjax];
$('body').delegate('.validate', 'keyup', function() {
var value = $('#the-input').val();
var results = validators.map(function(validator) {
return validator(input)
});
var allResolved = Promise.all(results).then(function() {
//...
}).catch(function() {
//...
})
});
这似乎工作正常,输入被验证为用户类型(代码被简化为不会太长,例如 keyup 丢失后超时等等)。
现在我想知道如果前一个 keyup 事件的验证仍在进行中,如何终止 ajax 请求。是否有可能检测到承诺处于哪个状态并可能从外部拒绝承诺?
【问题讨论】:
标签: javascript ajax promise cancellation