Node.js 诺德梅勒赢得';在出口处不要邮寄
在我的脚本中,我想发送一封电子邮件,其中包含有关使用NodeEmailer运行脚本的数据。在脚本的中间使用了同样的<代码>运输机< /代码>,并且我成功地发送了电子邮件。但是,退出事件处理程序中的相同代码根本不起任何作用。没有电子邮件,没有“Report Sent!”输出到控制台,尽管我确实将Node.js 诺德梅勒赢得';在出口处不要邮寄,node.js,email,events,nodemailer,Node.js,Email,Events,Nodemailer,在我的脚本中,我想发送一封电子邮件,其中包含有关使用NodeEmailer运行脚本的数据。在脚本的中间使用了同样的运输机< /代码>,并且我成功地发送了电子邮件。但是,退出事件处理程序中的相同代码根本不起任何作用。没有电子邮件,没有“Report Sent!”输出到控制台,尽管我确实将mailpoption变量的输出输出到控制台。假设异步操作在退出之前没有完成,我添加了一个临时延迟步骤来验证这一点。仍然没有生成电子邮件。我做错什么了吗 function exitHandler(er) { e
mailpoption
变量的输出输出到控制台。假设异步操作在退出之前没有完成,我添加了一个临时延迟步骤来验证这一点。仍然没有生成电子邮件。我做错什么了吗
function exitHandler(er) {
end = moment().utc();
// report template
var tplPath = path.resolve('report.html');
var juiceFileDeAsync = deasync(juice.juiceFile);
var tpl = juiceFileDeAsync(tplPath, { webResources: {images: false} });
var email = nunjucks.renderString(tpl, {
startDate: start.format("MMMM Do YYYY, h:mm:ss a"),
duration: end.diff(start,'seconds'),
report: sentEmails,
warns: warns,
errors: errors
});
// email report
mailOptions.to = '<valid email>';
mailOptions.html = email;
transporter.sendMail(mailOptions, function(error, info) {
console.log('Report sent!', error, info);
});
console.log(mailOptions);
if (er) {
console.log(er);
}
var e = new Date().getTime() + (10 * 1000);
while (new Date().getTime() <= e) {
;
}
}
// do something when app is closing
process.on('exit', exitHandler);
process.on('uncaughtException', exitHandler);
函数exitHandler(er){
结束=力矩().utc();
//报告模板
var tplPath=path.resolve('report.html');
var juiciefiledeasync=deasync(juice.juiciefile);
var tpl=juiceFileDeAsync(tplPath,{webResources:{images:false});
var email=nunjucks.renderString(tpl{
startDate:start.format(“MMMM-Do-YYYY,h:mm:ss-a”),
持续时间:end.diff(开始,秒),
报告:Sent电子邮件,
警告:警告,,
错误:错误
});
//电子邮件报告
mailpoptions.to='';
mailpoptions.html=电子邮件;
transporter.sendMail(邮件选项,函数(错误,信息){
log('已发送报告!',错误,信息);
});
日志(邮件选项);
如果(er){
控制台日志(er);
}
var e=new Date().getTime()+(10*1000);
while(new Date().getTime()
查看事件:退出文档:
process.on('exit', function(code) {
// do *NOT* do this
setTimeout(function() {
console.log('This will not run');
}, 0);
console.log('About to exit with code:', code);
});
一旦所有退出侦听器完成运行,进程将退出。因此,您只能在此处理程序中执行同步操作
我猜我看错了。我以为异步操作会排队,如果它们在处理程序完全退出之前运行,那么它们将在进程结束之前运行。因此,延迟将确保异步操作在完全退出之前完成。是否存在实际的“阻塞”在异步操作上?如果是,任何同步发送电子邮件的库?即使是process.nextTick也不会启动(刚刚测试过)。我不能推荐节点的同步电子邮件客户端…网络/套接字操作再次是异步的。您可以尝试同步写入文件,并使用cron定期检查文件并通过电子邮件重新发送。