【问题标题】:Kue: event to tell once the queue is emptyKue: 队列为空时通知的事件
【发布时间】:2015-11-19 07:54:45
【问题描述】:

我在我的一个项目中使用kue 从数据库中删除过时的锁。我能够处理单个作业,例如更新 mongoDB 中的单个文档。

var kue = require('kue')
 , queue = kue.createQueue();

queue.process('staleLocks', function(job, done){
  removeLock(job.data.id, done);
});

function removeLock(id, done) {    
  // mongoDB call
  done();
}

但是,我想通过收集队列处理后的所有 id 来一次更新所有文档。我什至可以存储所有 ID。唯一的问题是,当队列被处理时,我无法跟踪某种事件来同步整个过程。

【问题讨论】:

    标签: javascript queue mean-stack kue


    【解决方案1】:

    如果我正确理解您的问题,我认为有队列维护功能 queue.inactiveCount() described here 可能会有所帮助。

    难道您不能定期检查队列的长度并在计数为 0 且收集的锁数大于 0 时执行锁删除?类似的东西

    // assume locksid is an array with the collected locks id
    var intervalHandle = setInterval( function() {
    
      queue.inactiveCount(function( err, total ){
        if (!err && total === 0 && locksid.length > 0 ){
          locksid.forEach( function(lock){
            removeLock(lock);
          })
        }
      })
    }, 2000 );
    
    // somewhere else in your code, you might want
    // to stop the interval check
    clearInterval( intervalHandle );
    

    由于我不知道您的工作人员是如何构建的,因此我将 clearInterval() 调用排除在回调之外,但如果 removeLock() 是一次性任务,您甚至可以在 forEach() 循环中调用它完成了。

    我希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-12
      • 2021-11-05
      • 2011-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多