【问题标题】:kue node.js process jobs behaviourkue node.js 处理作业行为
【发布时间】:2016-01-08 03:42:31
【问题描述】:

我开始使用 kue/node.js 。我检查了一个教程,它有这个代码

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

function newJob (){
    var job = queue.create('new_job');
    job.save();
}

queue.process('new_job', function (job, done){
    console.log('Job', job.id, 'is done');
    done && done();
})


setInterval(newJob, 3000);

所以当我从终端节点 test.js 运行它时,我将每 3 秒输出一次“job { job id } is done”。

现在我将代码更改为以下

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

   var job = queue.create('new_job');
   job.save();

    queue.process('new_job', function (job, done){
        console.log('Job', job.id, 'is done');
        done && done();
    })

我删除了 newJob 函数和 setInterval ,我希望代码会运行一次,因为我先创建队列并保存作业,然后我将在下面处理它。但是当我从终端运行代码时没有任何反应,没有输出。

为什么我没有得到预期的结果?这背后的逻辑是什么。请解释 。在此先感谢。

【问题讨论】:

    标签: javascript node.js kue


    【解决方案1】:

    这是因为在创建进程侦听器“new_job”之前创建了“new_job”。如果在创建进程侦听器后创建队列,它应该像这样工作:

    var kue = require('kue')
        , queue = kue.createQueue();
    
    queue.process('new_job', function (job, done){
        console.log('Job', job.id, 'is done');
        done && done();
    })
    
    var job = queue.create('new_job');
    job.save();
    

    【讨论】:

    • 嗯,我用你的代码试过还是一样的结果:(
    • 添加进程监听 queue.process 可能是异步的,所以 queue.create('new_job') 可能不会被注册。如果你像这样包装最后两行怎么办: setTimeout(function(){ var job = queue.create('new_job'); job.save(); })
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-26
    • 2019-09-10
    • 1970-01-01
    • 2016-04-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多