इसमें बहुत सी चीजें गलत हैं। यह अवधारणा काम नहीं करेगी।
शुरुआत के लिए, आपका while(true)
लूप इवेंट लूप को ब्लॉक कर देता है इसलिए db
कभी भी मूल्य नहीं मिल सकता है इसलिए आपका लूप कभी पूरा नहीं होता है।
जब कनेक्ट में नेटवर्क ऑपरेशन पूरा हो जाता है, तो यह ईवेंट कतार में एक ईवेंट जोड़ देगा और इसके साथ जुड़े कॉलबैक (और फिर हल किया गया वादा) केवल तभी चल सकता है जब आप ईवेंट लूप पर वापस नियंत्रण लौटाते हैं ताकि ईवेंट संसाधित हो सके।
लेकिन, आपका while(true)
लूप ईवेंट लूप को ब्लॉक कर देता है ताकि कोई ईवेंट संसाधित न हो सके। जब तक आप await
का उपयोग नहीं कर रहे हैं लूप के अंदर (जो अन्य घटनाओं को चलाने की अनुमति देता है), आप नोड.जेएस में इस तरह एक प्रतीक्षा लूप का उपयोग नहीं कर सकते। यह सिर्फ एक अनंत लूप बनाता है।
जब तक हमारे पास शीर्ष स्तर की await
न हो जाए जो मॉड्यूल इनिशियलाइज़ेशन (जिस पर काम किया जा रहा है) के साथ काम करता है, आप सीधे एसिंक्रोनस रूप से प्राप्त मूल्य को निर्यात नहीं कर सकते।
इसके बजाय, आप एक वादा निर्यात कर सकते हैं और कॉल करने वाले को डीबी प्राप्त करने के लिए वादे का उपयोग करना होगा। या एक फ़ंक्शन निर्यात करें जो एक वादा लौटाता है।
इन अन्य उत्तरों में लूप के दौरान व्यस्त-प्रतीक्षा के साथ समस्याओं के बारे में अधिक जानकारी:
जावास्क्रिप्ट - लूप के दौरान इसमें क्या गलत है? कभी न खत्म होने वाला लूप
एक क्यों करता है जबकि लूप इवेंट लूप को ब्लॉक करता है?