库的工作进展始终为0



我正在使用kue进行长期运行的操作。我希望能够跟踪操作进度。

var kue = require('kue'),
queue = kue.createQueue();
var daJob = queue.create('da', {
    title: 'data analysis'
    , batchSize: req.params.batchSize
}).save( function(err){
   if( !err ) console.log( daJob.id );
});
// listeners on the different events
daJob.on('complete', function(result){
  console.log('Job completed with data ', result);
  daJob.remove();
}).on('failed attempt', function(errorMessage, doneAttempts){
    console.log('Job failed');
}).on('failed', function(errorMessage){
    console.log('Job failed');
}).on('progress', function(progress, data){
    console.log('progress'+progress);
});

queue.process('da', function(daJob, done){
    var total = 0;
    async.parallel([
        function(callback){
            Col1.count({}, function(err, c) {
                total += c;
                callback();
            });
        },
        function(callback){
            Col2.count({}, function(err, c) {
                total += c;
                callback();
            });
        },
        function(callback){
            Col3.count({}, function(err, c) {
                total += c;
                callback();
            });
        }], function done(err, results) {
            if (err) console.error(err);
            var count = 0;
            async.parallel([
                function (callback) {
                    var cur1 = col1.find().lean().cursor({batchSize: req.params.batchSize});
                    cur1.on('data', function (mobileTN) {
                        count++;
                        functions.workMobileRecord(mobileTN);
                        console.log('mobile ' +count/total);
                        daJob.progress(count,total);
                    });
                    cur1.on('close', function () {
                        callback();
                    });
                },
                function (callback) {
                    var cur2 = col2.find().lean().cursor({batchSize: req.params.batchSize});
                    cur2.on('data', function (fixedTN) {
                        count++;
                        console.log(count/total);
                        daJob.progress(count,total);
                    });
                    cur2.on('close', function () {
                        callback();
                    });
                },
                function (callback){
                    var cur3 = col3.find().lean().cursor({batchSize:req.params.batchSize});
                    cur3.on('data', function(videoTN){
                        count++;
                        console.log(count/total);
                        daJob.progress(count,total);
                    });
                    cur3.on('close', function () {
                        callback();
                    });
                }], function done(err, results) {
                    if (err) console.error(err);
                    done(results);
                });
            });
        });

当我在.on('progress')内部打印进度变量时,它总是打印为0。

根据文档:

工作进度

工作进度对于长期运行的工作(例如视频)非常有用 转换。要更新工作的进度,请简单地调用 job.progress(完成,总计[,数据]):

job.progress(框架,totalframes);数据可用于传递额外 有关工作的信息。例如消息或对象 当前状态的一些额外上下文数据。

如何进行调试?文档不是最新的吗?

这似乎是库的问题。

设置数据值(应该是可选的)后,它开始工作。

我还注意到,有时候,停止将其进度事件更新。我发现的解决方案是重命名正在从事工作的工作。

最新更新