0
votes

Comment pousser les résultats de la requête à la variable de tableau dans Node.js?

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. xxx


3 commentaires

Vous ne pouvez pas revenir d'un rappel asynchrone, ici .toarray () est un rappel


C'est une opération asynchrone pour aller chercher la collection. Vous pouvez envisager d'utiliser async / attendre dans la fonction


@Kunalmukherjee il ne renvoie rien de rappel, il ne fait que pousser au tableau


3 Réponses :


1
votes

TOARRAY est async - votre console de console.Logging the Vide Tableau avant que l'appel de Toarray ne se produise. Essayez ceci: xxx


1 commentaires

toarray () utilise également un "rappel" dans le code de votre réponse. Donc, vous ne peut pas attendre un "rappel".



0
votes

Vous ne pouvez pas revenir d'un rappel asynchrone, ici .toarray () est un rappel.

Modifiez votre code pour transmettre une fonction de rappel que vous pouvez envoyer le résultat.

en supposant que cela soit écrit dans mongoosemodule.js xxx

et dans votre gestionnaire express: xxx


0 commentaires

1
votes

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 async / attendre et prometteur comme ci-dessous. xxx

Cela pourrait vous aider.


8 commentaires

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 .