Node.js: निरीक्षण करें कि घटना लूप में क्या बचा है जो स्क्रिप्ट को स्वाभाविक रूप से बाहर निकलने से रोक रहा है




(3)

Node.js, संस्करण 8 से शुरू होकर, इस तरह की जानकारी प्राप्त करने के लिए एक आसान मॉड्यूल प्रदान करता है।

async_hooks : Node.js एप्लिकेशन के अंदर बनाए गए अतुल्यकालिक संसाधनों के जीवनकाल को ट्रैक करने के लिए कॉलबैक रजिस्टर करने के लिए एक एपीआई।

यदि मुख्य ईवेंट लूप में कॉलबैक शेष है तो Node.js स्क्रिप्ट से बाहर नहीं निकलेगा। जबकि कोई व्यक्ति ज़बरदस्त तरीके से स्क्रिप्ट को process.exit() कहकर समाप्त कर सकता है या अपवादों को फेंक सकता है, हमेशा उचित सफाई करके स्क्रिप्ट को "स्वाभाविक रूप से" समाप्त करने की सिफारिश की जाती है। हालांकि, यह कभी-कभी मुश्किल हो सकता है क्योंकि कोड में कीड़े उचित सफाई को रोक सकते हैं, उदाहरण के लिए, मैं एक IntervalObject को हटाने के लिए भूल सकता हूं जब कोई आवश्यकता नहीं होती है, आदि, जो अंततः कार्यक्रम को समाप्त करने से रोकता है।

इसलिए, यह पता लगाने के लिए एक गैर-समाप्ति स्क्रिप्ट को डीबग करने का एक तरीका है कि ईवेंट लूप में क्या पंजीकृत है? दूसरे शब्दों में, क्या Node.js में एक तरीका है डिबग करना जो प्रोग्राम को बाहर निकलने से रोक रहा है?


आप सक्रिय I / O अनुरोधों और सूची की process._getActiveRequests() प्राप्त करने के लिए process._getActiveRequests() कॉल कर सकते हैं process._getActiveRequests() ओपन हैंडल / फ़ाइल डिस्क्रिप्टर की सूची प्राप्त करने के process._getActiveHandles()


wtfnode पैकेज wtfnode द्वारा उल्लिखित टूल का उपयोग करता है, लेकिन अधिक डेवलपर के अनुकूल तरीके से प्रस्तुत करता है। मैं इन परेशानियों को कम करने के लिए इसकी अत्यधिक अनुशंसा करता हूं।

const wtf = require('wtfnode');

// ...

wtf.dump();