sql >> Base de Datos >  >> NoSQL >> MongoDB

usando module.exports de una manera inusual

Hay muchas cosas mal con esto. Este concepto no funcionará.

Para empezar, tu while(true) loop bloquea el bucle de eventos por lo que db nunca puede obtener un valor, por lo que su ciclo nunca se completa.

Cuando se completa la operación de red en la conexión, agregará un evento a la cola de eventos y la devolución de llamada asociada con él (y luego la promesa resuelta) solo se puede ejecutar cuando devuelva el control al bucle de eventos para que ese evento pueda ser procesado.

Pero, tu while(true) loop bloquea el bucle de eventos para que no se puedan procesar eventos. A menos que esté usando await dentro del ciclo (que permite que se ejecuten otros eventos), no puede usar un ciclo de espera como este en node.js. Simplemente crea un bucle infinito.

Hasta que tengamos el nivel superior await que funciona con la inicialización del módulo (en el que se está trabajando), no se puede exportar directamente un valor obtenido de forma asíncrona.

En cambio, puede exportar una promesa y la persona que llama tiene que usar la promesa para obtener la base de datos. O exporte una función que devuelva una promesa.

Más información sobre problemas con el bucle while de espera ocupada en estas otras respuestas:

Esperar hasta que flag=true

javascript - ¿Qué hay de malo en este ciclo while? bucle interminable

¿Por qué un while loop bloquea el bucle de eventos?