Ordre d'exécution du code

Par Ludo46, il y a 7 ans


Bonjour,

Je vous solicite car je bloque sur un éléments de mon code. Etant plus ou moins novice dans la domaine du javascripts, je souhaiterai avoir votre aide.

Dans le but de me familiariser avec différentes technologies et le javascript, je me suis orienté vers la création d'une application.

Environnement

Code

Le code ci-dessous est appelé en POST

let alreadyExist = false user.countDocuments({ email: body.email }, (error, count) => { if (error) throw error alreadyExist = (count > 0) console.debug('DEBUG 1 : ' + alreadyExist) }) console.debug('DEBUG 2 : ' + alreadyExist) if (alreadyExist) { // code erreur... } [...] console.debug('DEBUG 3 : ' + alreadyExist) // Fin du code

Résultats

DEBUG 2 : false DEBUG 3 : false DEBUG 1 : false

Explications

Le code se trouve typiquement dans un formulaire d'inscription (côté serveur) et permet (normalement...) de vérifier si un utilisateur enregistré utilise déjà l'adresse email soumise.

Or, la vérification réalisée dans la fonction passé à la méthode countDocuments() s'exécute qu'à la toute fin du code, et donc me valide l'adresse email alors que cette dernière est déjà utilisée.

Ma question est donc : Comment faire pour que le code s'execute "dans l'ordre" (DEBUG 1 puis DEBUG 2 puis DEBUG 3 par exemple)

J'espère avoir été assez claire dans mes explications, si vous avez besoins de plus d'informations, j'essayerai d'y répondre dans les plus brefs délais.

Cordialement,

4 réponses

Pierrot01, il y a 7 ans

Salut,
Il faut utiliser les promises ou des callBacks ;)

a+
Pierre

cocadev, il y a 7 ans

Salut, le (error, count) => { est une fonction de callback donc appelé après user.countDocuments si tu veux faire ce que tu attends il faudrais faire quelques chose du type

let alreadyExist = false user.countDocuments({ email: body.email }, (error, count) => { if (error) throw error alreadyExist = (count > 0) console.debug('DEBUG 1 : ' + alreadyExist); console.debug('DEBUG 2 : ' + alreadyExist) if (alreadyExist) { // code erreur... } [...] console.debug('DEBUG 3 : ' + alreadyExist) // Fin du code });

Ce qu'il se passe actuellement :

Lance l'execution de users.countDocument...
Affiche DEBUG 2
[...]
Affiche DEBUG 3
Fin de l'execution de users.countDocument, donc appelle le callback
Affiche DEBUG 1

Avec le nouveau code:

Lance l'execution de users.countDocument...
Fin de l'execution de users.countDocument, donc appelle le callback
Affiche DEBUG 1
Affiche DEBUG 2
[...]
Affiche DEBUG 3

Huggy, il y a 7 ans

Pour comprendre comment fonctionne nodejs, il faut regarder le fonctionnement de l'event loop.
Ici le code du callback est remis dans une queue qui est intérrogée lorsque le code principal est terminé
voir le schéma ici qui indique dans quel ordre sont interrogées les différentes queues

Pour avoir un ordre procédural, regarde les vidéos sur async/await

Ludo46, il y a 7 ans

Bonjour,

Déjà merci de votre attention, grâce à vous, j'ai pu résoudre mon "problème" !