如何中止公牛队列中的特定任务?

How to abort a particular task in bull queue?

根据这个包 https://github.com/OptimalBits/bull 是否有可能中止 "waiting queue" 中的某个任务? 我的用例如下:

我有一个 mongodb 集合 "users" 和一个集合 "friendship",我在其中存储了两个用户的姓名和头像。所以我只需要一个查询就可以获取某个用户的好友列表。当用户更改他的头像时,我必须更新 "friendship" 集合中该用户的所有文档。这是一个性能无关紧要的操作,因为我希望它在后台执行并且一致性对于这个用例并不重要。但是当用户在短时间内多次更新他的头像时,我想取消所有引用旧任务(用于更新友谊集合)除了最新的。这可能是公牛吗?

在此先致谢,如果能提供相关信息,我将不胜感激。

看Bull参考你会发现有一个Job.remove()方法。由于您没有发布任何代码,我只能猜测它的样子。因此我已经描述了你可以做什么。

然而,您需要做的是将 Promise<Job> 存储在 Map<string, Map<string, Promise<Job>> 中,例如 Queue.add() 返回的 Promise<Job>。字符串将是您的用户的 _idPromise<Job>[] 是一个包含特定用户的所有排队作业的数组。解决作业后(您可以使用 Job.finished() 等待已解决的作业),您需要从地图中删除 Promise。

每当用户更改他的头像时,如果您需要删除任何工作,您就可以查看您的地图。上面提到的Map中的value是另一个Map(key是一个字符串,代表JobId),可以很容易地通过JobId删除Jobs。这听起来可能有点复杂,但不要害怕 - 如果您了解地图的工作原理,那应该不是问题:-)。