Bonjour à tous,
J'ai besoin de faire plusieurs appels asynchrones et, si certains échouent, d'obtenir lequel ou lesquels ont échoué et leur message d'erreur. Pour cela, j'ai le code suivant :
$(function () {
function async1() {
var dfd = $.Deferred();
dfd.resolve('1');
return dfd.promise();
}
function async2() {
var dfd = $.Deferred();
dfd.reject('2');
return dfd.promise();
}
function async3() {
var dfd = $.Deferred();
dfd.reject('3');
return dfd.promise();
}
function buildMessage(v1, v2, v3) {
var msg = v1 != null ? v1 : "(v1 null)";
msg += v2 != null ? v2 : "(v2 null)";
msg += v3 != null ? v3 : "(v3 null)";
return msg;
}
var d1 = async1();
var d2 = async2();
var d3 = async3();
$.when(d1, d2, d3).done(function (v1, v2, v3) {
$('#done').html(buildMessage(v1, v2, v3));
}).fail(function (v1, v2, v3) {
$('#fail').html(buildMessage(v1, v2, v3));
});
});
Voici le JSFiddle avec ce code : https://jsfiddle.net/bjyfhave/8/
Dans jQ, la fonction de rappel dans .done()
a les valeurs résolues comme paramètres (v1, v2, v3). Si vous remplacez le dfd.reject
par .resolve
en async2
y async3
il fonctionne très bien.
J'ai suivi la même logique pour le .fail()
et je m'attendais à ce résultat :
(v1 null)23
Mais à la place, j'obtiens :
3(v2 null)(v3 null)
Ce qui signifie que j'obtiens le dernier rejet comme 1er argument et que les autres sont perdus.
Je n'ai pas trouvé d'exemples concrets de cette situation, ce qui m'amène à poser la question suivante :
Comment obtenir tous les rejets de plusieurs méthodes asynchrones exécutées simultanément ?
Merci pour votre aide.