मैं एक फार्म सत्यापन के निर्माण कर रहा हूँ और वादों मैं वादा पद्धति का उपयोग कर अतुल्यकालिक सत्यापन कार्यों को लागू करने का फैसला किया जानने के लिए:बीच में बंद करें ajax अनुरोध
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() {
//...
})
});
यह ठीक काम कर रहा है, इनपुट के रूप में मान्य है उपयोगकर्ता प्रकार (कोड को बहुत लंबा नहीं होने के लिए सरलीकृत किया गया है, उदाहरण के लिए कुंजीपटल गुम होने के बाद टाइमआउट और इसी तरह)।
अब मैं सोच रहा हूं कि AJAX अनुरोध को कैसे मारना है यदि पिछले कीप घटना से सत्यापन अभी भी प्रगति पर है। क्या किसी भी तरह से यह पता लगाना संभव है कि कौन सा राज्य वादा करता है और संभवतः बाहर से वादे को खारिज कर देता है?
महान, मैं समझ गया, आपके उत्तर के लिए धन्यवाद। वैसे भी स्पष्ट निर्माण को हटाने के संबंध में - xhr को अभी भी validateAjax फ़ंक्शन से वापस करने की आवश्यकता है, है ना? –
आपका वैध अजाक्स वापस अपरिभाषित है - क्या कोई लाइन गुम है? –
@ लुकासक्रल - मुझे लगता है कि var 'वादा 'को वापस करने की आवश्यकता होगी, क्योंकि इसमें' .abort' फ़ंक्शन है - लेकिन मैंने कोड नहीं लिखा है, इसलिए मैं केवल –