According to this package https://github.com/OptimalBits/bull is it possible, to abort a certain task in the "waiting queue"? My use-case is as follows:
I have a mongodb collection "users" and a collection "friendship" where I store name and avatar of both users. So I only need one query to get friendlist of a certain user. When a user changes his avatar, I have to update all documents within this user in "friendship" collection. This is a performance-uncritical operation since I want it to do in background and consistency is not important for this use-case. But when a User updates his avatar several times in a short time span, I want to cancel all referencing old tasks (for updating the friendship collection) except the newest. Is this with bull possible?
Thanks in advance, I would appreciate every information about that.
Looking at the Bull reference you will find that there is a
Job.remove()
method. Since you haven't posted any code I could only guess how it looks like. Hence I have described what you could do.However what you have to do is to store the
Promise<Job>
which will be returned byQueue.add()
for instance in aMap<string, Map<string, Promise<Job>>
. String would be the_id
of your user andPromise<Job>[]
is an array containing all the queued jobs for a specific user. Once a Job has been resolved (you can await the resolved job withJob.finished()
) you need to remove the Promise from your Map.Whenever a user changes his avatar you could then look into your Map if you need to remove any jobs. The value in the above mentioned Map is another Map (key is a string, which represents the
JobId
) which easily allows you to remove Jobs by JobId. That may sound a bit complex, but don't be afraid - if you understand how Maps work it shouldn't be a problem :-).