J'ai plusieurs fonctions Javascript, chacune effectue une manipulation DOM, puis exécute une requête ajax. Je veux être capable d'exécuter la première fonction, qui manipule le DOM puis déclenche sa requête ajax, puis, lorsque la requête ajax se termine, je veux exécuter la deuxième fonction si la requête ajax est vraie, ou arrêter l'exécution du reste des fonctions et effectuer d'autres manipulations DOM (comme afficher un message d'erreur). Je souhaite que ces fonctions s'exécutent séquentiellement, l'une après l'autre, et ne se poursuivent que si aucune d'entre elles ne renvoie false à partir de leur requête ajax. Si aucun d'entre eux ne retourne faux, alors tous devraient fonctionner et finalement je ferais une manipulation que j'ai dans mon callback "toujours".Comment puis-je exécuter plusieurs fonctions de manière séquentielle et arrêter toutes les opérations en cas d'échec?
Comment puis-je accomplir ceci? Ma première pensée a été d'utiliser des promesses, pour garder le code propre, mais après plusieurs heures de lecture, je n'arrive tout simplement pas à comprendre comment faire fonctionner ce code.
Ci-dessous mon code actuel, et c'est ce que je reçois dans ma console quand il exécute:
inside test1
inside test2
inside test3
fail
[arguments variable from fail method]
always
[arguments variable from always method]
Voici ce que je veux dans ma console (notez la contient pas de chaîne « à l'intérieur test3 ») :
inside test1
inside test2
fail
[arguments variable from fail method]
always
[arguments variable from always method]
Voici le code:
(function($) {
var tasks = {
init: function() {
$.when(
this.test1(),
this.test2(),
this.test3()
).done(function() {
console.log('done');
console.log(arguments);
})
.fail(function() {
console.log('fail');
console.log(arguments);
})
.always(function() {
console.log('always');
console.log(arguments);
});
},
test1: function() {
console.log('inside test1');
return $.getJSON('https://baconipsum.com/api/?type=meat-and-filler');
},
test2: function() {
console.log('inside test2');
// note the misspelled "typ" arg to make it fail and stop execution of test3()
return $.getJSON('https://baconipsum.com/api/?typ=meat-and-filler');
},
test3: function() {
console.log('inside test3');
return $.getJSON('https://baconipsum.com/api/?type=meat-and-filler');
}
};
tasks.init();
})(jQuery)
Toutes les idées?
ressemble à ce que j'étais après ... bien que je ne sois pas sûr si les fonctions de grosse flèche sont soutenues de la même manière que les fonctions anonymes régulières sont? Je vais essayer, mais ça a l'air vraiment génial! Merci, @Jaromanda X – andrux
'=>' rend le code plus concis, et moins de tracas avec quoi 'ceci' est: p vous pouvez toujours transpiler le ci-dessus –
J'ai converti votre code en JS" régulier ", il s'exécute mais il doesn ' t enregistrer ce que je m'attendais dans la console: https://gist.github.com/andruxnet/11a0c2baa45e870fc449bac02cb66bf5 – andrux