Beaucoup de choses ne vont pas avec ça. Ce concept ne fonctionnera pas.
Pour commencer, votre while(true)
loop bloque la boucle d'événement donc db
ne peut jamais obtenir de valeur, donc votre boucle ne se termine jamais.
Lorsque l'opération réseau dans la connexion est terminée, elle ajoute un événement à la file d'attente d'événements et le rappel qui lui est associé (puis la promesse résolue) ne peut s'exécuter que lorsque vous rendez le contrôle à la boucle d'événements afin que cet événement puisse être traité.
Mais, votre while(true)
loop bloque la boucle d'événements afin qu'aucun événement ne puisse être traité. Sauf si vous utilisez await
à l'intérieur de la boucle (qui permet à d'autres événements de s'exécuter), vous ne pouvez pas utiliser une boucle d'attente comme celle-ci dans node.js. Cela crée simplement une boucle infinie.
Jusqu'à ce que nous ayons await
de haut niveau qui fonctionne avec l'initialisation du module (sur laquelle on travaille), on ne peut pas directement exporter une valeur obtenue de façon asynchrone.
Au lieu de cela, vous pouvez exporter une promesse et l'appelant doit utiliser la promesse pour obtenir la base de données. Ou exportez une fonction qui renvoie une promesse.
Plus d'informations sur les problèmes liés à la boucle d'attente occupée dans ces autres réponses :
javascript - Qu'est-ce qui ne va pas avec cette boucle while ? boucle sans fin
Pourquoi un boucle while bloquer la boucle d'événement ?