Ich bin ein Formular-Validierung Aufbau und Versprechungen zu lernen, ich asynchrone Validierungsfunktionen versprechen Muster mit implementieren entschieden:Abort Ajax-Request in einem Versprechen
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() {
//...
})
});
Dies scheint zu funktionieren gut, wird die Eingabe validiert Benutzertypen (der Code wird vereinfacht, um nicht zu lang zu sein, z. B. Zeitüberschreitung, nachdem der Schlüssel fehlt usw.).
Jetzt frage ich mich, wie die Ajax-Anfrage zu beenden, wenn die Validierung aus dem vorherigen Keyup-Ereignis noch in Bearbeitung ist. Ist es irgendwie möglich zu erkennen, in welchem Zustand die Verheißung ist und möglicherweise das Versprechen von außen abzulehnen?
Großartig, ich es, vielen Dank für Ihre Antwort. Anyway in Bezug auf die Entfernung von expliziten Konstruktion - die xhr muss immer noch von der validateAjax-Funktion zurückgegeben werden, oder? –
Ihr validateAjax gibt undefined zurück - fehlt eine Zeile? –
@LukasKral - Ich denke, die var 'Versprechen' müsste zurückgegeben werden, da es die' .abort' Funktion hat - aber ich habe den Code nicht geschrieben, also kann ich nur spekulieren –