如何在NodeJS中的process.exit()之前发送电子邮件?

时间:2020-11-12 09:36:15

标签: node.js nodemailer

我需要在服务器关闭时发送电子邮件,我正在使用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是异步的。

1 个答案:

答案 0 :(得分:3)

节点邮件具有回调机制transporter.sendMail(data[, callback]),您可以将其转换为Promise 那么您将可以在您的代码中执行此操作:

sendMail('Server is shutting down')
.then(()=>{ 
  process.exit();
})

或者您可以通过将函数转换为异步函数来添加并等待 因此,只有在sendMail函数回调执行完之后(例如,将邮件添加到Postfix队列中),才会调用两种解决方案之一process.exit();的结果

相关问题