Running jobs in agenda with async/await
I have a some modules and models which are seperated. now I want to add agenda
for running jobs in scheduling mode. when i code in sync
everything is working fine but I want to handle it with async
and await
.
here is my code:
import { User } from 'models';
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);
});
};
and in my anenda
index file:
import Agenda from 'agenda';
const agenda = new Agenda({ db: { address: mongo } });
agenda.on('success', (job) => {
console.log(`job ${job.attrs.name} was successfull.`);
});
and in the some of my route(just for test) i call like this:
agenda.now('userjob', { name: 'name job', userId: '5bf993f11ad57c4dd9edcd74' });
the problem here is my user
object when i log it
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;
the output is in the wrong order i think:
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 }
How can i make agenda to work exact order which expected async/await
work?
javascript node.js mongoose agenda
add a comment |
I have a some modules and models which are seperated. now I want to add agenda
for running jobs in scheduling mode. when i code in sync
everything is working fine but I want to handle it with async
and await
.
here is my code:
import { User } from 'models';
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);
});
};
and in my anenda
index file:
import Agenda from 'agenda';
const agenda = new Agenda({ db: { address: mongo } });
agenda.on('success', (job) => {
console.log(`job ${job.attrs.name} was successfull.`);
});
and in the some of my route(just for test) i call like this:
agenda.now('userjob', { name: 'name job', userId: '5bf993f11ad57c4dd9edcd74' });
the problem here is my user
object when i log it
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;
the output is in the wrong order i think:
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 }
How can i make agenda to work exact order which expected async/await
work?
javascript node.js mongoose agenda
add a comment |
I have a some modules and models which are seperated. now I want to add agenda
for running jobs in scheduling mode. when i code in sync
everything is working fine but I want to handle it with async
and await
.
here is my code:
import { User } from 'models';
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);
});
};
and in my anenda
index file:
import Agenda from 'agenda';
const agenda = new Agenda({ db: { address: mongo } });
agenda.on('success', (job) => {
console.log(`job ${job.attrs.name} was successfull.`);
});
and in the some of my route(just for test) i call like this:
agenda.now('userjob', { name: 'name job', userId: '5bf993f11ad57c4dd9edcd74' });
the problem here is my user
object when i log it
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;
the output is in the wrong order i think:
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 }
How can i make agenda to work exact order which expected async/await
work?
javascript node.js mongoose agenda
I have a some modules and models which are seperated. now I want to add agenda
for running jobs in scheduling mode. when i code in sync
everything is working fine but I want to handle it with async
and await
.
here is my code:
import { User } from 'models';
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);
});
};
and in my anenda
index file:
import Agenda from 'agenda';
const agenda = new Agenda({ db: { address: mongo } });
agenda.on('success', (job) => {
console.log(`job ${job.attrs.name} was successfull.`);
});
and in the some of my route(just for test) i call like this:
agenda.now('userjob', { name: 'name job', userId: '5bf993f11ad57c4dd9edcd74' });
the problem here is my user
object when i log it
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;
the output is in the wrong order i think:
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 }
How can i make agenda to work exact order which expected async/await
work?
javascript node.js mongoose agenda
javascript node.js mongoose agenda
edited Nov 26 '18 at 11:25
amir
asked Nov 26 '18 at 11:20
amiramir
9031026
9031026
add a comment |
add a comment |
0
active
oldest
votes
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53480001%2frunning-jobs-in-agenda-with-async-await%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
0
active
oldest
votes
0
active
oldest
votes
active
oldest
votes
active
oldest
votes
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53480001%2frunning-jobs-in-agenda-with-async-await%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown