我在我的一个项目中使用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。唯一的问题是,当队列处理完毕后,我无法跟踪某种事件来同步整个过程。
答案 0 :(得分:2)
如果我正确理解您的问题,我认为可能会有帮助的队列维护功能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()
循环后。
我希望这会有所帮助。