[英]callback in node-schedule's callback
在我的(基于express.js的)环回应用程序中,我想安排一个任务每1秒运行一次。 它应该计算每个已打开的票,如果它们已经打开了某个时间,则应该发送电子邮件。 下面是一个简化的代码。
问题是,如期记录了“ scheduleJob”,但票证数量没有记录。 我认为这是一个上下文问题。 我应该如何记录找到的机票号码? 我应该如何从count
的回调传递回schedule
的回调?
var schedule = require('node-schedule');
module.exports = function(app) {
var Ticket = app.models['Ticket']
var j = schedule.scheduleJob('* * * * * *', function(){
console.log('scheduleJob')
Ticket.count(function(err, count){
if (err) {console.log(err)}
console.log(count)
})
});
};
不要像这样计算所有未完成的票-这会花费大量资源。
您应该将票证数量保留在node.js中并增加/减少它。 如果您有多个与数据库交互的进程,请使其中一个成为您的主数据库,并使其处理此任务。
关于您的问题,似乎库node-schedule
不支持异步调用。
算法
在程序开始时,查看数据库中的票证,并在应该发送电子邮件时检索下一个时间戳。
例如,如果要打开一张票并且您的数据库有:
ticket 1 / 10 min
ticket 2 / 40 min
因此,您的下一封邮件应在20分钟(60分钟-40分钟)内发送。
使用setTimeout()
在20分钟内唤醒您的节点。 唤醒后,发送邮件,然后再次查看数据库以查找下一封要发送的邮件。
如果数据库中插入了新的票证,或者已删除/更新了票证,请重新计算setTimeout
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.