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.
EnvironnementLe 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,
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
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
Bonjour,
Déjà merci de votre attention, grâce à vous, j'ai pu résoudre mon "problème" !