2017-03-11 108 views
0

我有以下代碼上kueKue沒有正確處理事件?

require('dotenv').load(); 
const mailer = require('../helper/mailer'); 
const kue = require('kue'), 
    queue = kue.createQueue(); 

console.log("Starting server"); 
queue.process('email',function(job,done){ 
    console.log(job.data); 
    mailer 
    .prepareContext(job.data) 
    .then(mailer.prepareBody) 
    .then(mailer.prepareMail) 
    .then(mailer.sendMail) 
    .then((data)=>{ 
     console.log("Mail sent"); 
    }) 
    .catch((err)=>{ 
     console.log(err.message); 
    }); 
}); 

queue.on('error',(err)=>{ 
    console.log(err); 
}); 

發送郵件的問題是,它僅響應於第一事件。我必須重新啓動腳本才能發送另一個腳本。我在這裏做錯了什麼? Processing Concurrency 處理併發

默認情況下調用queue.process()將一次只接受一個任務:

我使用

helper.sendVerificationMail = function(data){ 
    return new Promise(function(fullfill,reject){ 
    try{ 
     var ctx = {}; 
     ctx.from = "account"; 
     ctx.to_email = data.email; 
     ctx.subject = "Verifiy your email address"; 
     ctx.template = "signup"; 
     ctx.ctx = {}; 
     ctx.ctx.verification = data.verification; 
     queue.create('email',ctx).save(); 
     fullfill(data); 
    }catch(err){ 
     reject(err); 
    } 
    }); 
}; 

回答

0

我發現這個文檔上添加事件進行處理。對於像發送電子郵件這樣的小任務,這並不理想,因此我們可以通過傳遞一個數字來指定此類型的最大活動作業:

queue.process('email', 20, function(job, done){ 
    // ... 
});