Bonjour,

Je cherche (désespérément) à utiliser les objets jQuery.Defferd() pour déférer l’utilisation de mes propres méthodes.

Le principe serait le suivant :
- un objet quelconque (singleton) qui comporte des méthodes
- L'initialisation de cet objet (méthode "login" par exemple) doit faire en sorte que les autres méthodes "attendent" que ce login échoue ou aboutisse pour se "lancer" (jQuery.when(...).then fait cela très bien) ; la raison est tout simplement que ce login sera basé sur un flux ajax et je dois en attendre le retour (positif ou non) de ce flux avant de pouvoir "autoriser" l'utilisation des autres méthodes...
- un nouvel appel à cette méthode login devrait pouvoir déférer l'ensemble des méthodes (associées à cette "instance"). Par exemple si je fais :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
unObjet.login('x');
unObjet.uneMethode();
unObjet.uneAutreMethode();
unObjet.logout();
Tout doit se dérouler de manière "sérialisée" (c'est tout bon d'après mes tests avec les Deferred/resolve/reject/when/then... qui vont bien).

Par contre, si je fais :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
unObjet.login('x');
unObjet.uneMethode();
unObjet.uneAutreMethode();
unObjet.logout();
/* == jusque là, tout va toujours bien ;-) */
 
unObjet.login('y'); /* j'arrive bien à déférer le login de cet objet en utilisant un autre Deferred que celui de "login" */
unObjet.uneMethode(); /* Cette méthode n'attend pas que le login de "y" soit "resolve/reject" (je suppose que c'est parce qu'elle est déjà appelée une première fois) ; elle se lance directement */
unObjet.uneAutreMethode(); /* idem */
unObjet.logout(); /* idem */
J'aurais souhaité que toutes les méthodes associées à l'objet "x" se lancent (c'est bien le cas), puis qu'ensuite toutes les méthodes associées à l'objet "y" se lance à leur tour de manière sérialisée (ie. en attente que l'objet "y" soit résolu)...

Voici un exemple de code illustrant le propos : http://jsfiddle.net/7nsus/

Peut-être que la solution n'est pas à chercher du coté des deferred, mais j'ai le sentiment que c'est quand même par là que ça se situe ;-)

Toutes autre proposition de démarche sera la bienvenue ;-)

Merci d'avance de vos contributions et bonne journée