J'utilise Node.js et Mongodb Atlas qui est une DB en ligne. J'ai établi une connexion à Mongodb Atlas et envoyé une requête à la base de données et récupéré une collection. La collection est renvoyée sans erreurs. Maintenant, j'essaie de pousser les résultats de la requête à un tableau, mais le tableau est toujours vide.
J'ai essayé d'utiliser la console.log () et je vois que le tableau devient vide après la boucle. J'ai remarqué que la deuxième console.log est imprimée auparavant. Je ne sais pas pourquoi. P>
3 Réponses :
TOARRAY est async - votre console de console.Logging the Vide Tableau avant que l'appel de Toarray ne se produise. Essayez ceci:
toarray () code> utilise également un "rappel" dans le code de votre réponse. Donc, vous ne peut pas b> attendre code> un "rappel".
Vous ne pouvez pas revenir d'un rappel asynchrone, ici Modifiez votre code pour transmettre une fonction de rappel que vous pouvez envoyer le résultat. P > en supposant que cela soit écrit dans et dans votre gestionnaire express: p> .toarray () code> est un rappel. mongoosemodule.js code> p>
Créer une connexion et getting des informations à partir du tableau sont des opérations asynchrones. Cela pourrait prendre le temps de remplir la demande. Vous pouvez donc gérer des opérations asynchrones en utilisant Cela pourrait vous aider. P> p> async / attendre code> et prometteur code> comme ci-dessous.
J'ai essayé cette solution et il semble fonctionner, mais lorsque je l'envoie à la vue, la page n'affiche pas le résultat car elle se charge avant que le tableau soit renvoyé. Y a-t-il un moyen de faire attendre la page pour les résultats?
Utilisez-vous réagir?
Non, un simple nœud.js et mangouste. Dans mon routeur, la ligne ressemble à ceci: routeur.get ('/ registre', (req, res) => res.Render ("registre", {Données: organisations.data ()}));
Imprimer la réponse retour de cette fonction juste avant de rendre votre vue et voyez que l'une ou l'autre réponse est arrivée ou non
En fait, vous retournez une fonction non une donnée, vous devez appeler votre fonction.
Vous voulez dire dans la vue ou dans le routeur?
Dans le fichier de routeur.
Laissez-nous Continuer cette discussion en chat .
Vous ne pouvez pas revenir d'un rappel asynchrone, ici
.toarray () code> est un rappelC'est une opération asynchrone pour aller chercher la collection. Vous pouvez envisager d'utiliser
async / attendre code> dans la fonction@Kunalmukherjee il ne renvoie rien de rappel, il ne fait que pousser au tableau