jQuery.Deferred (). alors, comment résoudre avec plusieurs paramètres
Donc mon API s'attend à ce que, lorsqu'un particulier différé est résolu, il obtient 2 params.
fn().done(function(arg1, arg2) {
console.log(arg1, arg2);
}).fail(function(err) {
console.error(err);
});
Maintenant concernant le fn
fonction ci-dessus, il doit d'abord attendre que certains autres reporté à retourner avant de la résoudre.
function other() {
//stubbed out to always resolve
return $.Deferred().resolve().promise();
}
function fn() {
return other().then(function() {
return [1, 2];
});
}
Mais ce n'est pas de travail, parce que arg1
viendra comme [1, 2]
et arg2
sera undefined
. Je ne peux pas comprendre comment revenir à quelque chose de Deferred.then()
premier succès filtre argument de fonction, de sorte que les canalisations différés résout avec plusieurs arguments.
Bien sûr, je peux le faire:
function fn() {
var done = $.Deferred();
other().done(function(){
done.resolve(1, 2);
}).fail(function(){
done.reject.apply(done, arguments);
});
return done.promise();
}
Mais qui n'est pas aussi élégant que l'utilisation de .then()
et j'ai maintenant besoin de vous soucier de l'négatifs cas d'échec de l'API à chaque fois même si je sais que je suis simplement la tuyauterie de la rejetée de l'état à travers.
Et oui, je pourrais aussi changer fn()
api pour résoudre avec un tableau, mais je suis vraiment en espérant y est une solution élégante à ce.
source d'informationauteur codefactor
Vous devez vous connecter pour publier un commentaire.
Vous devrez invoquer
resolve()
oureject()
afin de passer plusieurs arguments..then()
ne comprennent pas les mécanismes de "propagation" une collection en retour. Il va juste continuer la collection intacte que le 1er argument.Mais, il va interagir avec un
Deferred
ou de la promesse qui est retourné. À partir de la le paragraphe commençant par "avec jQuery 1.8":Donc, vous pouvez utiliser votre exemple de
other()
comme base pourfn()
de le garder assez concis, avec un autreDeferred()
:http://jsfiddle.net/cqac2/