Avec jQuery.when()
, si une requête échoue, ils échouent tous.
$.when(deferred1, deferred2).then(function() {
// Called only after both deferred are resolved
}, function() {
// Called immediately after one of the deferreds is rejected
});
Comment pouvez-vous attendre que tout exécute même des échecs? J'ai essayé d'utiliser .always()
au lieu de .then()
mais le rappel est également appelé juste après le premier échec.
Une solution (moche) serait d'avoir des drapeaux à contrôler lorsque les deux opérations sont terminées et d'utiliser le .always()
sur chacun d'eux (sans $.when()
).
var deferred1Complete = false;
var deferred2Complete = false;
function callback() {
if (deferred1Complete && deferred2Complete) {
// Execute after both deferred are either resolved or rejected
}
}
deferred1.always(function() {
deferred1Complete = true;
callback();
});
deferred2.always(function() {
deferred2Complete = true;
callback();
});
Y a-t-il une meilleure façon de procéder?
J'ai trouvé d'autres solutions intéressantes dans cette question (http://stackoverflow.com/questions/12152595/jquery-deferreds-waiting-for-an-array-of-ajax-requests -to-complete-even-failur) et (http://stackoverflow.com/questions/5824615/jquery-when-callback-for-when-all-deferreds-are-no-long-unresolved-either-r) – Jonatan