2016-01-21 54 views
10

您好我正在使用Kue創建作業。是否有可能更新kue節點中已經創建的作業js

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個小時。

現在我將檢查每個想要創建新作業並獲取ID的傳入請求。

從上面的代碼可以看出,當我創建工作時,我會將作業ID添加到作業中。

所以現在我想檢查隊列中現有作業的job_id的傳入ID並使用新PARAMS更新現有作業,如果找到匹配的ID 。

所以我的工作隊列每次都有唯一的job_id :)。

是否有可能? ,我搜查了很多,但沒有找到幫助,我檢查了kue json API。但它只能創建並獲取檢索作業,無法更新現有記錄。

在此先感謝。

+0

您是否嘗試過更新方法? https://github.com/Automattic/kue/blob/master/lib/queue/job.js#L807 – Hugeen

+0

在創建作業之前,使用json API GET/job/。如果它存在(狀態200),則更新作業。如果它不存在(狀態404),請創建作業。 – Monkpit

回答

11

這在文檔和示例中未提及,但jobupdate方法。

您可以通過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(); 
     } 
    }); 
    }); 
}); 

完整的例子是here

更新:您還可以考慮使用「本機」作業ID,這是kue已知的。 當您創建作業您可以得到這份工作ID:

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(); 
}); 
+0

它是否更新'延遲'期限?下面是我的代碼,在更新之前和之後,延遲保持不變 – Sahas

相關問題