Событие «задание завершено» не запускается в Kue

Я не могу понять, что я делаю неправильно, может быть, кто-то может указать на это. Я пытаюсь понять, почему мое событие «завершение задания» не срабатывает.

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, но не говорит, что задание завершено.


person HariSad    schedule 21.01.2013    source источник


Ответы (3)


Этот вопрос старый, но в интернете до сих пор нет решения для тех, кто сталкивается с этой проблемой даже при размещении 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. Убедитесь, что ваши обработчики в порядке.
Я сам экспериментировал с обработчиками событий, пытаясь передать им несколько аргументов. Мой "сбойный" обработчик событий принял как код ошибки, так и другие данные, которые я передал через метод done(err, data). Это было неправильно. Поэтому проверьте документацию и официальные примеры Kue, чтобы убедиться, что ваш код не содержит ошибок.

<сильный>3. Если ничего не помогает, выполните redis-cli flushall в своем терминале.
И ОСТОРОЖНО!!! Это удалит все в вашем redis. Я сам в этом новичок, поэтому он используется только как зависимость для Kue в моей системе. Я точно не знаю, но я предполагаю, что это может уничтожить ваши данные, которые вы можете использовать в Redis. Хотя это как-то решает проблему, когда уже ничего не помогает.

Все, пожалуйста, не стесняйтесь предлагать любые другие безопасные способы исправления Kue с помощью Redis.

P.S. Не проверял, но полагаю, что изменение имени процесса для ваших заданий (в моем примере это «какой-то процесс») также может решить проблему.

person mvlabat    schedule 11.07.2016
comment
как вернуть успех из процесса - person user269867; 10.10.2017
comment
@ user269867, извините, я был бы рад помочь, но я не понял вашего вопроса. Куда вы хотите вернуть успех? Как и для чего вы хотите обрабатывать это возвращаемое значение? Вы должны уточнить. Во всяком случае, это звучит как еще один вопрос SO - person mvlabat; 11.10.2017

Я думаю, вам нужно запустить job.save() после выполнения .create.

person James    schedule 11.03.2013
comment
У меня была такая же проблема даже при вызове save() - person hoju; 15.07.2013
comment
Вы вызывали save() после установки обработчиков событий? - person webjay; 06.10.2013

Как упоминает @James, вы должны вызывать .save() после установки обработчиков событий.

См. пример.

person webjay    schedule 06.10.2013