मेरे Node.js स्क्रिप्ट डेटाबेस 1 में एक टेबल से पंक्तियों पढ़ता है, कुछ प्रसंस्करण करता है और डेटाबेस के लिए पंक्तियों लिखते 2.क्या एक Node.js स्क्रिप्ट बाहर निकलने के लिए एक अच्छा तरीका है के बाद "सब कुछ किया गया है"
सबकुछ पूरा होने के बाद स्क्रिप्ट को बाहर निकलना चाहिए।
मुझे कैसे पता चलेगा कि सबकुछ किया गया है और फिर नोड से बाहर निकलें?
अगर मैं इस तरह एक कॉलबैक फ़ंक्शन है:
function exit_node() {
process.exit();
}
(संपादित करें: इस बीच में यह स्पष्ट हो गया है कि process.exit() भी db.close() के साथ प्रतिस्थापित किया जा सकता है - लेकिन यह नहीं है प्रश्न यह है कि सवाल क्या है। सवाल यह है कि इस समय वास्तव में ऐसा करने के लिए, यानी इस कॉलबैक को कैसे और कहाँ निष्पादित किया जाए।)
लेकिन इसे कहीं भी संलग्न करना आसान नहीं है। डीबी 1 से अंतिम पढ़ने के बाद सही नहीं है, क्योंकि प्रसंस्करण और लेखन अभी भी होना है।
डीबी 2 को लिखने के लिए इसे जोड़ना आसान नहीं है, क्योंकि इसे अंतिम लेखन के बाद संलग्न किया जाना है, लेकिन प्रत्येक लेखन अनिवार्य है और यह नहीं जानता कि यह आखिरी लेखन है या नहीं।
यह सैद्धांतिक रूप से भी हो सकता है, कि अंतिम लेखन समाप्त हो गया है, लेकिन इससे पहले एक और लेखन अभी भी निष्पादित है।
संपादित करें: क्षमा करें, मैं सवाल का विवरण देख सकते हैं पूर्ण और शायद भ्रमित नहीं है, लेकिन कुछ लोगों को अभी भी समझा और वहां से नीचे अच्छा जवाब नहीं है। कृपया टिप्पणियां और उत्तर पढ़ना जारी रखें और इसे आपको पूरी तस्वीर देनी चाहिए।
संपादित करें: मैं कुछ "अवरुद्ध" नियंत्रक तंत्र के बारे में सोच सकता हूं। स्क्रिप्ट के विभिन्न हिस्सों प्रत्येक खुले "नौकरी" के लिए नियंत्रक को अवरोधक जोड़ते हैं और नौकरी समाप्त होने के बाद उन्हें छोड़ देते हैं, और नियंत्रक स्क्रिप्ट से बाहर निकलता है जब कोई और बॉकर मौजूद नहीं होता है। शायद async मदद कर सकता है: https://github.com/caolan/async
मुझे यह भी डर है कि यह कोड और तर्क को अनुचित कर देगा।
मुझे आपका प्रश्न नहीं समझ रहा है। जब सबकुछ किया जाता है तो नोड * बाहर निकलता है। एक बार जब एसिंक्रोनस कॉल प्रगति पर नहीं हो जाते हैं - एक बार जब आप अपने द्वारा पढ़े गए अंतिम रिकॉर्ड को संसाधित कर लेते हैं, और आपके सभी लेखन पूरा हो जाते हैं - तो नोड अपने आप से बाहर निकल जाएगा; आपको कुछ खास करने की ज़रूरत नहीं है। –
@ जोहेइट कई डेटाबेस मॉड्यूल प्रक्रिया को चालू रखते हुए कनेक्शन खोलेंगे। मुझे लगता है कि सवाल (सही है अगर मैं गलत हूं, शर्नान्डेज़) यह जानना है कि जब नोड को इसके सभी डेटाबेस से संबंधित एसिंक आईओ के साथ किया जाता है, तो वह जान सकता है कि प्रक्रिया को बाहर निकलने के लिए डीबी कनेक्शन को बंद करने के लिए कब पता चल सकता है। –
नोड तब तक बाहर नहीं निकलेगा जब तक कि एक या अधिक कॉलबैक प्रतीक्षा न हो या ईवेंट उत्सर्जक सक्रिय न हों। जैसा कि @ ब्रैंडन टिली ने उल्लेख किया है, डीबी-मॉड्यूल में से कुछ डीबी-कनेक्शन खुले रहते हैं (यह इवेंटइमीटर है), इसलिए आपको अपने प्रश्नों के साथ इसे बंद करना चाहिए। तो क्वेरी के कॉलबैक में 'db.close' जैसे कुछ लिखते हैं (दस्तावेज़ देखें), प्रक्रिया परिणाम और नोड स्वयं से बाहर निकलेंगे (बिना प्रक्रिया के' process.exit')। – elmigranto