这是我的目标:
最后一次文档更新后5分钟,我想执行一次性任务
所以这就是行动的流程:
我之前没有做过这样的事情,我不知道该从哪里开始。
我可以使用Mongoose中可用的方法轻松地挂接文档更改(例如,在保存时,执行func以设置或重置计时器)
然而,我无法想办法:
我已经调查了Cron的工作,但他们似乎每天都在同一时间安排任务。
我需要一个延迟任务的计时器,还需要重置该计时器的能力,并为计时器添加额外的数据。
任何提示都表示赞赏。
答案 0 :(得分:1)
这是我设法完成的解决方案。
首先,值得注意的是我的原始假设是正确的:
Cron工作非常适合每天同时安排的重复性任务。但是,对于即时创建并具有倒计时元素的任务,cron jobs不是正确的工具。
但是,请输入node-schedule(https://www.npmjs.com/package/node-schedule)
节点计划是Node.js的类似cron,而不是cron的灵活作业调度程序。它允许您使用可选的重复规则来安排在特定日期执行的作业(任意函数)。 它在任何给定时间只使用一个计时器(而不是每秒/分钟重新评估即将到来的作业)。
定时器的使用正是这些即时任务所需要的。
所以我的解决方案如下:
// node_modules/email-scheduler/index.js
module.exports = {};
我的想法(虽然尚未经过测试)是我可以通过创建节点模块为email_scheduler对象创建类似单身的实例。像这样:
> git checkout local-branch
> git branch --unset-upstream
> git push -u origin remote-branch
这样,我可以访问scheduleJobs并重置节点应用程序的每个文件中的计时器。
答案 1 :(得分:0)
您可以使用事件。使用某个参数调用事件,然后在任务添加睡眠并执行任务之前。但是在nodejs中添加sleep或settimeout不是一个好主意。
答案 2 :(得分:0)
我遇到了同样的难题,但我最终决定使用 javascript 本机函数。
function intervalFunc() {
//inside this function you can request to get the date and time then decide what to do and how to do it
autogens.serverAutoGenerate();//my function to autogenerate bills
}
setInterval(intervalFunc, 1000);//repeat task after one seconds
在你的node js应用的index文件或入口文件中添加代码会使函数重复执行。您可以根据需要选择更改频率。如果您想每天运行 3 次 cronjob,请获取 24 小时内的秒数,然后除以 3。如果您想在特定时间运行该作业,请使用 new Date()
,您可以检查确定现在是否适合执行您的活动。