Comment puis-je établir une séquence de différé fonctions jQuery 1.8.x?
Compte tenu de ces fonctions:
function func1() {
var dfd = $.Deferred();
setTimeout(function() {
dfd.resolve('Password');
}, 1000);
return dfd.promise();
}
function func2(message) {
var dfd = $.Deferred();
setTimeout(function() {
if (message == 'Password') {
dfd.resolve('Hello World');
}
}, 1000);
return dfd.promise();
}
Je voudrais trouver une meilleure façon de faire les suivants. Remarque c'est à l'aide de jQuery 1.8.x.
var promise = func1();
promise.done(function(message1) {
var promise2 = func2(message1);
promise2.done(function(message2) {
alert(message2);
});
});
Des idées? J'ai pensé à l'aide de jQuery #tuyau ou #puis pourrait fonctionner, mais je ne peux pas la comprendre. Voici un violon pour jouer: http://jsfiddle.net/Z7prn/
Vous devez vous connecter pour publier un commentaire.
Ce n'est pas compliqué (soit utiliser
.then
ou.pipe
, ils sont tous les deux le même depuis jQuery 1.8 je crois).Depuis
func2
renvoie un nouvel objet reporté, le.done
de rappel est fixé à la place.DÉMO
.then
depuis.pipe
a été déprécié en jQuery 1.8 (docs)J'ai eu un semblable de cas d'utilisation, donc je pense que cela devrait vous aider.
La méthode suivante va prendre un éventail de méthodes (qui peut ou ne peut pas retourner de Promesses) et de les exécuter dans l'ordre, en attente jusqu'à ce que chaque différé est complète avant de procéder. Le comportement par défaut est de s'arrêter sur un échec; deuxième argument permet de procéder si l'appel échoue ou pas.
fait échouer gestionnaire de signatures (Array<contexte>) Fonction (Array<Object{ rejeté|résolu: arguments }>), où contexte est le contexte de chaque resolveWith/rejectWith appel, ou le différé en question, et arguments est la thèse qui a été adopté dans la résolution de rejet.
Un exemple simple d'utilisation: http://jsfiddle.net/rG9rA/