अन्य उत्तर के साथ खेलने के बाद, यहाँ इस कार्य के लिए मेरा समाधान है। इस तरह से लागू करने से मुझे एक जगह सफाई को केंद्रीकृत करने में मदद मिलती है, इससे सफाई को दोहराए जाने से रोका जा सकता है।
- मैं अन्य सभी एक्ज़िटिंग कोड्स को 'एग्जिट' कोड पर रूट करना चाहूंगा।
const others = [`SIGINT`, `SIGUSR1`, `SIGUSR2`, `uncaughtException`, `SIGTERM`]
others.forEach((eventType) => {
process.on(eventType, exitRouter.bind(null, { exit: true }));
})
- क्या बाहर निकलें रूटर कॉल कर रहा है process.exit ()
function exitRouter(options, exitCode) {
if (exitCode || exitCode === 0) console.log(`ExitCode ${exitCode}`);
if (options.exit) process.exit();
}
- 'बाहर निकलने' पर, एक नए फ़ंक्शन के साथ क्लीन अप को हैंडल करें
function exitHandler(exitCode) {
console.log(`ExitCode ${exitCode}`);
console.log('Exiting finally...')
}
process.on('exit', exitHandler)
डेमो उद्देश्य के लिए, यह मेरे जिस्ट का लिंक है। फ़ाइल में, मैं चल रही प्रक्रिया को नकली करने के लिए एक सेटटाइमआउट जोड़ता हूं।
यदि आप दौड़ते हैं node node-exit-demo.js
और कुछ नहीं करते हैं, तो 2 सेकंड के बाद, आप लॉग देखते हैं:
The service is finish after a while.
ExitCode 0
Exiting finally...
सेवा समाप्त होने से पहले यदि आप समाप्त कर देते हैं ctrl+C
, तो आप देखेंगे:
^CExitCode SIGINT
ExitCode 0
Exiting finally...
क्या हुआ नोड कोड प्रक्रिया के साथ शुरू में निकली नोड प्रक्रिया है, फिर यह प्रोसेस.एक्सिट () और अंत में निकास कोड 0 के साथ बाहर निकलती है।