MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

usando module.exports in un modo insolito

Un sacco di cose sbagliate in questo. Questo concetto non funzionerà.

Per cominciare, il tuo while(true) loop blocca il loop degli eventi quindi db non può mai ottenere un valore, quindi il tuo ciclo non viene mai completato.

Al termine dell'operazione di rete nella connessione, verrà aggiunto un evento alla coda degli eventi e il callback ad esso associato (e quindi la promessa risolta) potrà essere eseguito solo quando si restituisce il controllo al ciclo di eventi in modo che l'evento possa essere elaborato.

Ma il tuo while(true) loop blocca il loop degli eventi in modo che nessun evento possa essere elaborato. A meno che tu non stia utilizzando await all'interno del ciclo (che consente l'esecuzione di altri eventi), non è possibile utilizzare un ciclo di attesa come questo in node.js. Crea semplicemente un ciclo infinito.

Fino a quando non avremo await di livello superiore che funziona con l'inizializzazione del modulo (su cui si sta lavorando), non è possibile esportare direttamente un valore ottenuto in modo asincrono.

Invece, puoi esportare una promessa e il chiamante deve usare la promessa per ottenere il db. Oppure esporta una funzione che restituisce una promessa.

Maggiori informazioni sui problemi con il ciclo di attesa occupato in queste altre risposte:

Attendere fino a flag=true

javascript - Cosa c'è di sbagliato in questo ciclo while? ciclo infinito

Perché un while loop blocca il loop degli eventi?