Возможно ли обновить уже созданную работу в kue node js

Привет, я создаю задания, используя Kue.

jobs.create('myQueue', { 'title':'test', 'job_id': id ,'params':  params } )
            .delay(milliseconds)
            .removeOnComplete( true )
            .save(function(err) {
                if (err) {
                    console.log( 'jobs.create.err', err );
                }

        });

каждое задание имеет время задержки, обычно это 3 часа.

Теперь я буду проверять каждый входящий запрос, который хочет создать новое задание, и получить идентификатор.

Как вы можете видеть из приведенного выше кода, когда я создаю задание, я добавлю идентификатор задания в задание.

так что теперь я хочу проверить входящий идентификатор с существующими заданиями "job_id s в очереди" и обновить существующее задание с новыми параметрами, если соответствующий идентификатор найдено.

поэтому моя очередь заданий будет иметь уникальную job_id каждый раз:).

Возможно ли это?, Я много искал, но никакой помощи не найдено, я проверил kue json API. но он может только создавать и получать задания на получение, не может обновлять существующие записи.

Спасибо заранее.

Ответ 1

Это не упоминается в документации и примерах, но существует метод update для job.

Вы можете обновить свои задания на job_id следующим образом:

// you have the job_id
var job_id_to_update = 1;
// get delayed jobs
jobs.delayed( function( err, ids ) {
  ids.forEach( function( id ) {
    kue.Job.get( id, function( err, job ) {
      // check if this is job we want
      if (job.data.job_id === job_id_to_update) {
          // change job properties
          job.data.title = 'set another title';
          // save changes
          job.update();
      }
    });
  });
});

Полный пример здесь.

Обновление: вы также можете использовать "собственный" идентификатор задания, который известен для kue. Вы можете получить идентификатор задания при создании задания:

var myjob = jobs.create('myQueue', ...
    .save(function(err) {
        if (err) {
            console.log( 'jobs.create.err', err );
        }
        var job_id = myjob.id;
        // you can send job_id back to the client
});

Теперь вы можете напрямую изменить задание без циклического перебора:

kue.Job.get( id, function( err, job ) {
  // change job properties
  job.data.title = 'set another title';
  // save changes
  job.update();
});