“工作完成”事件并未在Kue开火

时间:2013-01-21 08:27:47

标签: node.js redis kue

我无法弄清楚我做错了什么,也许是某人可以指出它。我试图找出为什么我的工作完成了#39;事件没有解雇。

var kue = require('kue'),           
jobs = kue.createQueue();
var util= require('util');
var job = jobs.create('test',  util.puts('123')).on('complete', function(){
    console.log("Job complete");
}).on('failed', function(){
    console.log("Job failed");
}).on('progress', function(progress){
    process.stdout.write('\r  job #' + job.id + ' ' + progress + '% complete');
});

现在,当我在节点上运行它时,它打印123,但它不能说工作完成。

3 个答案:

答案 0 :(得分:4)

这个问题已经过时了,但是互联网上仍然没有解决方案,即使放置save()也遇到了这个问题...我已经为自己制定了三个步骤来解决问题:

<强> 1。在您设置处理程序后,请确保在作业上调用save()方法。

var job = queue.create('some process', some_args);

job.on('complete', function(result) {

  console.log('complete');

}).on('failed', function(result) {

  console.log('failed');

}).removeOnComplete(true).save();

P.S。在完成时删除作业也是一种很好的做法,否则你会溢出redis内存。

<强> 2。确保你的处理人员没事。
我自己试验了事件处理程序,试图传递几个参数。我的失败&#39;事件处理程序接受了错误代码和我通过done(err, data)方法传递的其他数据。这不对。因此,请查看文档和官方Kue示例,以确保您的代码没有被窃听。

第3。如果没有任何帮助,请在终端中执行redis-cli flushall
并且小心!这将删除redis中的所有内容。我自己也是菜鸟,因此它仅用作我系统上Kue的依赖。我当然不知道,但我想这可能会破坏您在redis中使用的数据。虽然它以某种方式解决了问题,但没有更多的帮助。

每个人,请随意提出任何其他安全方法来解决Kue与redis。

P.S。 Haven不会检查,但我认为,更改工作的流程名称(在我的示例中,某些流程&#39;)也可以解决问题。

答案 1 :(得分:1)

我认为您需要在job.save()执行后运行.create

答案 2 :(得分:1)

@James所述,您必须在设置事件处理程序后调用.save()

请参阅example