Javascript laterJS中的多个设置超时不符合计划

Javascript laterJS中的多个设置超时不符合计划,javascript,node.js,settimeout,laterjs,Javascript,Node.js,Settimeout,Laterjs,我在NodeJS中有一个电子邮件数据库服务器,它在下面的时间范围内发送预定的电子邮件 Email 1: Immediately Email 2: 3 days after email 1 Email 3: 7 days after email 1 但是,当向应用程序提交多个条目时,它会抛出调度,以随机方式逐步完成设置超时 以下是安排电子邮件的相关代码 server.post'/api/addUser',req,res=>{ MongoClient.connecturl,functionerr

我在NodeJS中有一个电子邮件数据库服务器,它在下面的时间范围内发送预定的电子邮件

Email 1: Immediately
Email 2: 3 days after email 1
Email 3: 7 days after email 1
但是,当向应用程序提交多个条目时,它会抛出调度,以随机方式逐步完成设置超时

以下是安排电子邮件的相关代码

server.post'/api/addUser',req,res=>{ MongoClient.connecturl,functionerr,db{ 如果犯了错误,就扔出错误; var dbo=db.dbheroku_XXXXXXXX; var myobj={recruiter:req.body.recruiter,firstName:req.body.firstName,lastName:req.body.lastName,profile:req.body.profile,email:req.body.email,emailStep:'Step 1',emailscanscelled:'No',source:req.body.source,company:req.body.company,role:req.body.role}; dbo.collectionusers.insertOnemyobj,functionerr,data{ 如果犯了错误,就扔出错误; res.status200.发送“成功”; db.close; sendMailmyobj,req.body.emailOne,步骤1; var sched=later.parse.recur.every72.hour, t=later.setTimeoutfunction{sendMailmyobj,req.body.emailTwo,步骤2;},sched; var sched2=later.parse.recur.every168.hour, u=later.setTimeoutfunction{sendMailmyobj,req.body.emailThree,步骤3;},sched2; }; };
}; 我不会在这么长的时间里依赖setTimeout。我不确定node/v8中setTimeout的实现细节,但不管它们做什么,计算机时钟都会发生变化,虚拟机也会暂停/恢复

相反,定义一个任务列表,每隔几分钟运行一次较小的函数检查时间,并在有任何必要的任务时运行。您还可以使用crontab等来调用应用程序发送电子邮件。这样,您还可以确保重新启动此服务会很好

另外,我建议您稍微清理一下代码。通过定义一些变量,将内容移到每个函数调用之外