Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/450.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Kue:一旦队列为空,就要通知的事件_Javascript_Queue_Mean Stack_Kue - Fatal编程技术网

Javascript Kue:一旦队列为空,就要通知的事件

Javascript Kue:一旦队列为空,就要通知的事件,javascript,queue,mean-stack,kue,Javascript,Queue,Mean Stack,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

我在我的一个项目中使用它从数据库中删除过时的锁。我能够处理单个作业,比如在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。唯一的问题是,在处理队列后,我无法跟踪某种事件以同步整个过程。

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

当计数为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 );
由于我不知道您的worker是如何构建的,所以我将
clearInterval()
调用保留在回调之外,但是如果
removeLock()
是一次性任务,您甚至可以在
forEach()
循环完成后调用它

我希望这有帮助