Başka bir cevapla oynadıktan sonra, bu görev için benim çözümüm. Bu şekilde uygulamak temizliği tek bir yerde merkezileştirmeme yardımcı olur ve temizliğin iki kez ele alınmasını önler.
- Diğer tüm çıkış kodlarını 'çıkış' koduna yönlendirmek istiyorum.
const others = [`SIGINT`, `SIGUSR1`, `SIGUSR2`, `uncaughtException`, `SIGTERM`]
others.forEach((eventType) => {
process.on(eventType, exitRouter.bind(null, { exit: true }));
})
- ExitRouter'ın yaptığı işlem process.exit ()
function exitRouter(options, exitCode) {
if (exitCode || exitCode === 0) console.log(`ExitCode ${exitCode}`);
if (options.exit) process.exit();
}
- 'Çıkışta' temizliği yeni bir işlevle halledin
function exitHandler(exitCode) {
console.log(`ExitCode ${exitCode}`);
console.log('Exiting finally...')
}
process.on('exit', exitHandler)
Demo amaçlı olarak, bu benim özüm ile bağlantı . Dosyada, çalışan işlemi sahte bir setTimeout ekleyin.
Koşup node node-exit-demo.jshiçbir şey yapmazsanız, 2 saniye sonra günlüğü görürsünüz:
The service is finish after a while.
ExitCode 0
Exiting finally...
Hizmet bitmeden önce sonlandırırsanız ctrl+C, şunu görürsünüz:
^CExitCode SIGINT
ExitCode 0
Exiting finally...
Ne oldu Düğüm işlemi ilk olarak SIGINT koduyla çıktıktan sonra process.exit () öğesine yönlendirilir ve son olarak çıkış kodu 0 ile çıkar.