我正在尝试在不同的processor
文件中运行process
itsef,因为它在bull
文档中,我添加了如下文件。
// -------- Queue.js ----------
formatQueue.process(__dirname + "/processors/format-worker.js");
// On Cmplete Handler
formatQueue.on('completed', function(job, result){
console.log(result, "Format-Complete-job"); // result is undefined
if(job.data.is_well_format){
existenceQueue.add(job.data, { attempts: 3, backoff: 1000 });
}else QueueModel.lastStep(job.data)
});
// -------- Queue.js ends ---------
//format-worker.js
Validator = require("../../validators");
module.exports = (job) => {
Validator.Format.validate(job.data, (data) => {
job.data = data;
return Promise.resolve(data);
});
}
现在,在我之前使用的作业完成时,我曾经使用更新的作业参数获取作业数据。现在我没有获得更新的工作数据。文档中的第二个参数,即result
是undefined
。现在,在这种情况下,我如何获取更新的作业数据。
job
和processors
工作正常,我按如下方式运行process
。
formatQueue.process(function(job, done){
Validator.Format.validate(job.data, (data) => {
job.data = data;
done();
});
});
在这种情况下,作业数据本身正在更新,并且也可以工作。
我有多个队列在做不同的工作,一旦上一个作业成功完成,那么我只需要另一个作业来开始工作。 我还有另一个问题,我已经提到了那里的用例。请在此处查看。
让我帮助你,也给你一些提示。首先,您的代码中存在一些错误。进程函数不会返回您在验证回调中创建的承诺。现在,我不知道Validator.Format.validate
返回了什么,所以为了安全起见,我将这样写:
module.exports = job => {
return new Promise(resolve => {
Validator.Format.validate(job.data, data => {
resolve(data);
});
});
};
其次,一般来说,在进程处理程序本身中添加下一个作业比在"已完成"事件回调中添加下一个作业更健壮,原因是通过这样做,您将获得一个更健壮的解决方案,如果添加下一个作业由于某种原因失败,作业将失败,您将能够重试或检查失败的原因等等。
module.exports = (job) => {
return new Promise(resolve => {
Validator.Format.validate(job.data, (data) => {
if(data.is_well_format){
resolve(existenceQueue.add(data, { attempts: 3, backoff: 1000 }));
}else {
resolve(QueueModel.lastStep(data))
}
});
}
});