Comments (15)
Please @endroca share the actual code of SendEmail
job in your code-base. This will give better context on what is going wrong. Thanks
from adonis-queue.
Thank you, I updated the post
from adonis-queue.
Currently looked into it. I feel this might be because you are not calling the done(null, result)
function inside the handle()
method. I will inform @stitchng to update the README on this.
So, for now please update the handle()
function of your SendEmail job to look like the below:
async handle(link, done) {
console.log(Job [${this.constructor.name}] - handler called: status=running; id=${this.id});
link.reportProgress(10);
let data = link.data; // arguments passed into the constructor
let error = null;
let result = null;
try {
result = await Mail.send(data.emailTemplate, data.emailBody, message => {
message.to(data.emailAddress);
message.from(data.emailFrom);
message.subject(data.emailSubject);
});
link.reportProgress(50);
} catch (err) {
link.reportProgress(50);
error = err;
result = undefined
} finally {
link.reportProgress(100);
}
return done(error, result);
}
And then, try again
Let me know the outcome of this please @endroca . Thank you
from adonis-queue.
The error continues =(
info: serving app on http://127.0.0.1:3333
@@adonisjs/Queue: [Redis] Queue [low] now ready
Job [SendEmail] - handler called: status=running; id=1
Job [SendEmail] - status:retrying; id=1 undefined
Job [SendEmail] - handler called: status=running; id=1
Job [SendEmail] - status:failed; id=1 undefined
info: @@adonis/Queue: removing job from queue...
I used the same function that you described
async handle(link, done) {
console.log(
`Job [${this.constructor.name}] - handler called: status=running; id=${this.id}`
);
link.reportProgress(10);
const { data } = link; // arguments passed into the constructor
let error = null;
let result = null;
try {
result = await Mail.send(data.emailTemplate, data.emailBody, message => {
message.to(data.emailAddress);
message.from(data.emailFrom);
message.subject(data.emailSubject);
});
link.reportProgress(50);
} catch (err) {
link.reportProgress(50);
error = err;
result = undefined;
} finally {
link.reportProgress(100);
}
return done(error, result);
}
The funny thing is that I get two emails, for the failure attempt
from adonis-queue.
@endroca Please can you update the handle function as below:
async handle(link, done) {
console.log(
`Job [${this.constructor.name}] - handler called: status=running; id=${this.id}`
);
link.reportProgress(10);
const { data } = link; // arguments passed into the constructor
let error = null;
let result = null;
try {
result = await Mail.send(data.emailTemplate, data.emailBody, message => {
message.to(data.emailAddress);
message.from(data.emailFrom);
message.subject(data.emailSubject);
});
link.reportProgress(50);
} catch (err) {
link.reportProgress(50);
error = err;
result = undefined;
} finally {
link.reportProgress(100);
done(error, result);
}
}
It should be fine now
from adonis-queue.
I understand that with asynchronous call sending email it really makes sense to place the return function within the finally
} finally {
console.log('success');
link.reportProgress(100);
done(error, result);
}
@@adonisjs/Queue: [Redis] Queue [low] now ready
Job [SendEmail] - handler called: status=running; id=1
Job [SendEmail] - status:retrying; id=1 undefined
Job [SendEmail] - handler called: status=running; id=1
Job [SendEmail] - status:failed; id=1 undefined
info: @@adonis/Queue: removing job from queue...
success
success
However, the system returns the error function even before calling the "done" function
from adonis-queue.
@endroca confirming from the bee-queue repo. The handle function needs to return a Promise. Also from the reportProgress() function returns a promise as well and needs to be "awaited".
See below:
async handle(link) {
console.log(
`Job [${this.constructor.name}] - handler called: status=running; id=${this.id}`
);
await link.reportProgress(10);
const { data } = link; // arguments passed into the constructor
let error = null;
let result = null;
try {
result = await Mail.send(data.emailTemplate, data.emailBody, message => {
message.to(data.emailAddress);
message.from(data.emailFrom);
message.subject(data.emailSubject);
});
await link.reportProgress(50);
} catch (err) {
error = err;
result = undefined;
await link.reportProgress(50);
} finally {
await link.reportProgress(100);
return error === null ? Promise.resolve(result) : Promise.reject(error);
}
}
from adonis-queue.
@endroca have you tried the above ? any luck ?
from adonis-queue.
any luck
Hi @stitchng
I try this way and error continues.
from adonis-queue.
@stitchng @isocroft i think you need to update bee-queue dependency to the latest version and release a new version. The errors seem to be coming from the bee-queue library.
from adonis-queue.
Any solution here, having the same problem. For now I have stopped it sending the email more than once by setting retryCount to '0' if you set to 0 default value of 2 replaces it (This in itself is an issue)
from adonis-queue.
A new version of the adonis-queue library has just been released - v0.1.10 on NPM. @endroca @afolabiabass @mavafaei @stitchng
from adonis-queue.
@endroca @afolabiabass can you give feedback on the latest release please ? Do the errors still persist ?
from adonis-queue.
@mavafaei @afolabiabass @endroca how is the new version for adonis-queue (v0.1.10) working ? Still having errors ?
from adonis-queue.
Hello @endroca @mavafaei . Happy New Year to you all. Are you still experiencing these issues ? Please provide more info thanks
from adonis-queue.
Related Issues (12)
- Redis in queue HOT 2
- How do I send multiple Jobs in one Queue or run multiple Queues HOT 2
- the queue is not running on the redis HOT 4
- E_INVALID_QUEUE_DRIVER: rabbitmq is not a valid queue driver
- [ error ] "make:job" command not found
- Make:Job command failure HOT 1
- [v0.1.6] HttpException causes the destroyAll method of queue to throw error HOT 2
- Error: Cannot call Queue#process twice HOT 5
- Providers missing AdonisJS 4.1 HOT 4
- Doesn't Auto create queue.js file in config directory HOT 5
- Update Yarn and Npm HOT 3
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from adonis-queue.