MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

usando module.exports de uma maneira incomum


Muitas coisas erradas com isso. Este conceito não vai funcionar.

Para começar, seu while(true) loop bloqueia o loop de eventos para que db nunca pode obter um valor para que seu loop nunca seja concluído.

Quando a operação de rede na conexão for concluída, ela adicionará um evento à fila de eventos e o retorno de chamada associado a ele (e, em seguida, a promessa resolvida) só poderá ser executado quando você retornar o controle ao loop de eventos para que o evento possa ser processado.

Mas, seu while(true) loop bloqueia o loop de eventos para que nenhum evento possa ser processado. A menos que você esteja usando await dentro do loop (que permite que outros eventos sejam executados), você não pode usar um loop de espera como este em node.js. Apenas cria um loop infinito.

Até que tenhamos await de nível superior que trabalha com inicialização de módulo (no qual está sendo trabalhado), você não pode exportar diretamente um valor obtido de forma assíncrona.

Em vez disso, você pode exportar uma promessa e o chamador precisa usar a promessa para obter o banco de dados. Ou exporte uma função que retorne uma promessa.

Mais informações sobre problemas com o loop while de espera ocupada nestas outras respostas:

Aguarde até flag=true

javascript - O que há de errado com este loop while? loop sem fim

Por que um while loop bloquear o loop de eventos?