หลังจากเล่นกับคำตอบอื่น ๆ นี่คือทางออกของฉันสำหรับงานนี้ การใช้วิธีนี้จะช่วยให้ฉันจัดการการล้างข้อมูลส่วนกลางในที่เดียว
- ฉันต้องการหาเส้นทางรหัสที่ออกทั้งหมดอื่น ๆ เพื่อรหัส 'ออก'
const others = [`SIGINT`, `SIGUSR1`, `SIGUSR2`, `uncaughtException`, `SIGTERM`]
others.forEach((eventType) => {
process.on(eventType, exitRouter.bind(null, { exit: true }));
})
- สิ่งที่ exitRouter เรียกใช้คือ process.exit ()
function exitRouter(options, exitCode) {
if (exitCode || exitCode === 0) console.log(`ExitCode ${exitCode}`);
if (options.exit) process.exit();
}
- ที่ 'exit' ให้จัดการทำความสะอาดด้วยฟังก์ชั่นใหม่
function exitHandler(exitCode) {
console.log(`ExitCode ${exitCode}`);
console.log('Exiting finally...')
}
process.on('exit', exitHandler)
สำหรับวัตถุประสงค์ในการสาธิตนี่คือลิงค์ไปยังส่วนสำคัญของฉัน ในไฟล์ฉันเพิ่ม setTimeout เพื่อปลอมกระบวนการที่ทำงาน
หากคุณทำงาน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...
สิ่งที่เกิดขึ้นคือกระบวนการโหนดที่เริ่มต้นด้วยรหัส SIGINT จากนั้นจะประมวลผลเส้นทางไปยัง process.exit () และในที่สุดก็ออกจากด้วยรหัสทางออก 0