我有一些模块和模型是分开的。现在,我想为在调度模式下运行作业添加agenda。当我用sync编写代码时,一切都很好,但我想用async和await来处理它。下面是我的代码:
从‘models’导入{ User };
module.exports = async function (agenda) {
agenda.define('userjob', async (job) => {
console.log(`running job for user: ${job.attrs.data.userId}`);
const user = await User.findOne({ _id: job.attrs.data.userId });
console.log(user);
});
};在我的anenda索引文件中:
import Agenda from 'agenda';
const agenda = new Agenda({ db: { address: mongo } });
agenda.on('success', (job) => {
console.log(`job ${job.attrs.name} was successfull.`);
});在我的一些路径中(只是为了测试),我这样调用:
agenda.now('userjob', { name: 'name job', userId: '5bf993f11ad57c4dd9edcd74' });这里的问题是我在记录时的user对象
const agenda = new Agenda({ db: { address: mongo } });
agenda.on('ready', () => {
console.log('agenda is ready.');
});
agenda.on('start', async (job) => {
console.log(`job ${job.attrs.name} is started.`);
});
agenda.on('complete', (job) => {
console.log(`job ${job.attrs.name} is finished.`);
});
agenda.on('success', (job) => {
console.log(`job ${job.attrs.name} was successfull.`);
});
agenda.on('error', (job) => {
console.log(`job ${job.attrs.name} was failed.`);
});
jobTypes.forEach((type) => {
require(`./jobs/${type}`)(agenda);
});
(async function () {
if (jobTypes.length) {
await agenda.start();
}
}());
async function graceful() {
await agenda.stop();
process.exit(0);
}
process.on('SIGTERM', graceful);
process.on('SIGINT', graceful);
module.exports = agenda;我认为输出的顺序是错误的:
job saveInvestore is started.
running job for user: 5bf993f11ad57c4dd9edcd74
job saveInvestore was successfull.
job saveInvestore is finished.
{ investmentInfo:
{ fundCode: [],
FirstName: 'test',
LastName: 'testian',
Email: 'test@test.test',
Mobile: '0912121212',
MelliNumber: '1234554321' },
role: 'BASIC',
status: 'ACTIVE',
meta: '{}',
fundCode: [],
_id:
ObjectID {
_bsontype: 'ObjectID',
id: <Buffer 5b f9 93 f1 1a d5 7c 4d d9 ed cd 74> },
firstName: 'test',
lastName: 'testian',
email: 'test@test.test',
nationalCode: '1234554321',
phoneNumber: '0912121212',
gender: 'MALE',
createdAt: 2018-11-24T18:09:53.912Z,
updatedAt: 2018-11-24T18:09:53.912Z,
__v: 0 }我怎样才能让议程按照预期的async/await工作顺序工作呢?
发布于 2019-02-23 04:01:19
Agenda将第二个参数done注入到作业处理程序中,这是一个回调函数,当作业结束时应该调用它。
module.exports = async function (agenda) {
agenda.define('userjob', async (job, done) => {
console.log(`running job for user: ${job.attrs.data.userId}`);
const user = await User.findOne({ _id: job.attrs.data.userId });
console.log(user);
// Now your async/await job works!
return done();
});
};https://stackoverflow.com/questions/53480001
复制相似问题