[FTR]: Worker.remove()?
myckhel opened this issue · 4 comments
Given the below snippet.
useEffect(() => {
queue.addWorker({
name: 'message.upload',
worker: () => {}
});
queue.addWorker({
name: 'story.upload',
worker: () => {}
});
queue.start();
return () => {
queue.removeWorker('message.upload');
queue.removeWorker('story.upload');
};
}, []);
i would like to remove the worker without hardcoding the worker name.
Would it be a good idea for addWorker()
to return a worker instance?
if so then we can add a remove method to to Worker
which will call queue.removeWorker(this.name)
rather than the hardcode.
Finally would look like the snippet below
useEffect(() => {
const storyUploadWorkerInstance = queue.addWorker({
name: 'message.upload',
worker: () => {}
});
const messageSenderWorkerInstance = queue.addWorker({
name: 'story.upload',
worker: () => {}
});
queue.start();
return () => {
storyUploadWorkerInstance.remove()
messageSenderWorkerInstance.remove()
};
}, []);
Let me have your say.
Thanks.
Would this bring any benefits? Because that would introduce a depedency from th worker to the queue.
The benefit would be for the fact that it will return a worker instance which we can directly invoke call remove
on instead of manually calling queue.removeWorker(workerName);
if we cant afford to add worker dependency to the queue,
maybe we could try to make addWorker
return a remove function.
addWorker(worker: Worker<any>) {
if (this.workers[worker.name]) {
throw new Error(`Worker "${worker.name}" already exists.`);
}
this.workers[worker.name] = worker;
return () => this.removeWorker(worker.name)
}
finally the usage could be like this:
useEffect(() => {
const removeMsgWorker = queue.addWorker({
name: 'message.upload',
worker: () => {}
});
const removeStoryWorker = queue.addWorker({
name: 'story.upload',
worker: () => {}
});
queue.start();
return () => {
removeMsgWorker()
removeStoryWorker()
};
}, []);
How about this idea?
I still don't see a real benefit, but the second approach would be a nice to have.
I would prefer if the addWorker method would return the workerName, because than it could be used similar to setTimeout/clearTimout etc. Furthermore there is still the removeRelatedJobs flag, which could be passed.
What do you think?
Feel free to reopen this.