我尝试在JavaScript中构建一个基于promise的队列,其中每个任务都返回一个promise,该promise在任务完成时解析。队列应该一次处理一个任务,等待每个promise解决后再开始下一个。
然而,这里有一个复杂性:每个任务都有一个优先级,高优先级的任务应该跳过队列。如果添加了优先级较高的任务,则该任务应该是当前运行的任务完成后要运行的下一个任务,而不管它在队列中的位置如何。
下面是一个简单的例子:
class Task {
constructor(fn, priority) {
this.fn = fn;
this.priority = priority;
}
}
class PriorityPromiseQueue {
// implementation needed
}
PriorityPromiseQueue
应该处理Task
对象,按优先级顺序调用每个Task.fn
函数。Task.fn
将返回一个promise。
有没有人对如何实现这个PriorityPromiseQueue
有什么建议?我考虑过使用数组并按优先级排序,但我想知道是否有更有效的方法,特别是对于大量任务。
1条答案
按热度按时间yduiuuwa1#
最简单的实现方式可能是这样的。是的,它仍然是一个排序数组。AFAIK当前的JS实现使用自适应的https://en.wikipedia.org/wiki/Timsort,因此将新任务插入到已经排序的队列是线性的。
原因是我怀疑一个promise队列是否会有超过10000个项目。真实的案例场景将完全可以与它imho。