首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >node-schedule回调中的回调

node-schedule回调中的回调
EN

Stack Overflow用户
提问于 2019-01-08 18:54:21
回答 1查看 219关注 0票数 0

在我的(基于express.js的)环回应用程序中,我想安排一个任务每1秒运行一次。它应该计算每一张打开的票证,如果他们已经打开了一段时间,那么就应该发送一封电子邮件。下面是一个简化的代码。

问题是,正如预期的那样,'scheduleJob‘被记录下来了,但是票证的数量却没有。我认为这是一个背景问题。我应该如何记录找到的工单号码?我应该如何从count的回调到schedule的回调进行通信?

代码语言:javascript
复制
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)
    })
  });
};
EN

回答 1

Stack Overflow用户

发布于 2019-01-08 19:04:33

不要那样计算所有打开的票证--这会耗费大量资源。

您应该将工单数量保留在您的node.js中,并增加/减少它。如果您有多个进程与数据库交互,请让其中一个进程成为您的主进程,并使其处理此任务。

关于您的问题,似乎库node-schedule不支持异步调用。

算法

在程序启动时,在数据库中查找票证,并检索下一个发送电子邮件的时间戳。

例如,如果某个工单打开了1小时,并且您的数据库具有以下条件,则需要发送电子邮件:

代码语言:javascript
复制
ticket 1 / 10 min
ticket 2 / 40 min

所以你的下一封邮件应该在20分钟(60分钟- 40分钟)内发送。

使用setTimeout()在20分钟内唤醒您的节点。当您醒来时,发送邮件,并再次查看您的数据库以查找要发送的下一封邮件。

如果在数据库中插入了新的票证,或者删除/更新了票证,请重新计算您的setTimeout

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54090272

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档