2

我无法弄清楚我做错了什么,也许有人可以指出。我试图弄清楚为什么我的“工作完成”事件没有触发。

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,但它并没有说作业完成。

4

3 回答 3

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();

PS 在完成时删除作业也是一个好习惯,否则你会溢出 redis 内存。

2. 确保您的处理程序一切正常。
我自己尝试过事件处理程序,试图向它们传递几个参数。我的“失败”事件处理程序接受了错误代码和我通过done(err, data)方法传递的其他数据。这是不对的。因此,请检查文档和官方 Kue 示例,以确保您的代码没有错误。

3. 如果没有任何帮助,redis-cli flushall请在终端中执行。
小心!!!这将删除 redis 中的所有内容。我自己是其中的菜鸟,因此它仅用作 Kue 在我的系统上的依赖项。我不确定,但我想这会破坏你可能在 redis 中使用的数据。尽管它以某种方式解决了问题,但没有其他帮助。

请大家随意提出任何其他安全的方法来使用 redis 修复 Kue。

PS 没有检查,但我想,更改工作的进程名称(在我的示例中是“某个进程”)也可以解决问题。

于 2016-07-11T16:35:01.240 回答
1

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

于 2013-03-11T10:50:16.910 回答
1

正如@James提到的,您必须.save()在设置事件处理程序后调用。

请参阅示例

于 2013-10-06T16:53:18.537 回答