Bonjour,
J'ai découvert JavaScript fin 90, et à l'époque, c'était tout simple : séquentiel, tout va bien.
Seulement maintenant, tout est asynchrone, et en l'absence de formation / personne qui maîtrise sous la main, je galère un max pour ordonnancer mes actions et retrouver le contexte de fonctionnement.
Je vais donc vous donner un exemple de ce que je veux faire en synchrone, et j'espère que vous saurez m'indiquer comment faire la même chose en asynchrone.
Mettons donc un framework qui permet de faire du CRUD dans une table.
Mettons que je dois augmenter le salaire de tous les cadres d'une société si celle-ci a fait du bénéfice.
Ca va donc donner, en algo, un truc du genre :
Création d'une variable "Augmentation" égale 0.
Je recherche les infos de la société à partir de son ID.
Si BENEFICE > 0, alors je fais rechercher l'ensemble des salariés de la société.
Pour chaque salarié, si un CONTRAT = "Cadre", alors je charge son salaire, y additionne 10%, et incrémente aussi la variable "Augmentation" des 10%.
Je retourne la variable "Augmentation".
Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 function AugmentationCadres(idSociete, pourcent) { var augmentation = 0; var infoSociete = CRUD.Load({ Table: "SOCIETE", Id: idSociete }); if (infoSociete != null && infoSociete.BENEFICE > 0) { var listeSalaries = CRUD.LoadList({ Table: "SALARIE", Where: "soc_id = " + infoSociete.ID.ToString() }); for (i = 0; i < listeSalaries.Count; i++) { var infoSalarie = CRUD.Load({ Table: "SALARIE", Id: listeSalaries[i].Id }); if (infoSalarie != null && infoSalarie.CONTRAT == 'Cadre') { var aug = infoSalarie.SALAIRE * pourcent; augmentation += aug; infoSalarie.SALAIRE += aug; CRUD.Update({ Table: "SALAIRE", Record: infoSalarie }); } } } return augmentation; }
Youpi tralala, tout le monde est content (aux détails d'erreur de syntaxe).
Maintenant, pas de pot, tout mon framework est asynchrone, chaque méthode de CRUD attends un callback.
Comment faire ?
Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35 function AugmentationCadres(idSociete, pourcent) { var augmentation = 0; // Comment je passe mon pourcentage à ma société ? CRUD.Load({ Table: "SOCIETE", Id: idSociete }, societeChargee); // Renvoie toujours 0 return augmentation; } function societeChargee(res) { if (res != null && res.BENEFICE > 0) { CRUD.LoadList({ Table: "SALARIE", Where: "soc_id = " + res.ID.ToString() }, listeSalariesChargee); } } function listeSalariesChargee(res) { for (i = 0; i < res.Count; i++) { CRUD.Load({ Table: "SALARIE", Id: listeSalaries[i].Id }, salarieCharge); } } function salarieCharge(res) { if (res != null && res.CONTRAT == 'Cadre') { var aug = infoSalarie.SALAIRE * pourcent; // Comment je récupère mon poucentage ? augmentation += aug; // Comment je propage ma variable ? infoSalarie.SALAIRE += aug; CRUD.Update({ Table: "SALAIRE", Record: infoSalarie }, null); } }
Partager