これには多くの問題があります。この概念は機能しません。
手始めに、while(true)
loopはイベントループをブロックするため、db
値を取得できないため、ループが完了しません。
接続でのネットワーク操作が完了すると、イベントキューにイベントが追加され、それに関連付けられたコールバック(および解決されたpromise)は、イベントを処理できるように制御をイベントループに戻した場合にのみ実行できます。
ただし、while(true)
loopはイベントループをブロックするため、イベントを処理できません。 await
を使用している場合を除きます ループ内(他のイベントの実行を許可する)では、node.jsでこのような待機ループを使用することはできません。無限ループを作成するだけです。
トップレベルのawait
ができるまで モジュールの初期化(現在作業中)で機能するため、非同期で取得した値を直接エクスポートすることはできません。
代わりに、Promiseをエクスポートでき、呼び出し元はPromiseを使用してデータベースを取得する必要があります。または、promiseを返す関数をエクスポートします。
これらの他の回答のビジーウェイトwhileループの問題に関する詳細情報:
javascript-このwhileループの何が問題になっていますか?無限ループ