我需要在服务器关闭时发送电子邮件,我正在使用nodemailer,但是在process.exit()之前编写电子邮件时却没有发送电子邮件。
sendMail('Server is shutting down')
process.exit();
我试图使用“ beforeExit”事件,但是它也不起作用。
对于导致显式终止的条件(例如调用process.exit()或未捕获的异常),不会发出'beforeExit'事件。
据文档了解,
侦听器功能只能执行同步操作。调用“退出”事件侦听器后,Node.js进程将立即退出,从而导致仍在事件循环中排队的任何其他工作都将被放弃。例如,在以下示例中,超时将永远不会发生:
process.on('exit', (code) => {
setTimeout(() => {
console.log('This will not run');
}, 0);
});
在退出事件上,它需要进行同步调用,但nodemailer是异步的。
答案 0 :(得分:3)
节点邮件具有回调机制transporter.sendMail(data[, callback])
,您可以将其转换为Promise
那么您将可以在您的代码中执行此操作:
sendMail('Server is shutting down')
.then(()=>{
process.exit();
})
或者您可以通过将函数转换为异步函数来添加并等待
因此,只有在sendMail函数回调执行完之后(例如,将邮件添加到Postfix队列中),才会调用两种解决方案之一process.exit();
的结果