一个灵活的异步队列,用于处理具有可配置并发性、优先级和过期时间的任务。
特性:
任务将并发处理,直至达到配置的并发限制。当一个任务完成时, 如果并发限制允许,则处理下一个待处理任务。
错误处理:
示例用法:
const asyncQueuer = new AsyncQueuer<string>(async (item) => {
// 处理项目
return item.toUpperCase();
}, {
concurrency: 2,
onSuccess: (result) => {
console.log(result);
}
});
asyncQueuer.addItem('hello');
asyncQueuer.start();
const asyncQueuer = new AsyncQueuer<string>(async (item) => {
// 处理项目
return item.toUpperCase();
}, {
concurrency: 2,
onSuccess: (result) => {
console.log(result);
}
});
asyncQueuer.addItem('hello');
asyncQueuer.start();
• TValue
new AsyncQueuer<TValue>(fn, initialOptions): AsyncQueuer<TValue>
new AsyncQueuer<TValue>(fn, initialOptions): AsyncQueuer<TValue>
(value) => Promise<any>
AsyncQueuerOptions<TValue>
AsyncQueuer<TValue>
addItem(
item,
position,
runOnItemsChange): void
addItem(
item,
position,
runOnItemsChange): void
将项目添加到队列。如果队列已满,则拒绝该项目并调用 onReject。 可以根据优先级或根据配置在前面/后面插入项目。
TValue & object
QueuePosition = ...
boolean = true
void
queuer.addItem({ value: 'task', priority: 10 });
queuer.addItem('task2', 'front');
queuer.addItem({ value: 'task', priority: 10 });
queuer.addItem('task2', 'front');
clear(): void
clear(): void
从队列中删除所有待处理项目。不影响活动任务。
void
execute(position?): Promise<any>
execute(position?): Promise<any>
从队列中删除��返回下一个项目,并使用它执行任务函数。
Promise<any>
queuer.execute();
// LIFO
queuer.execute('back');
queuer.execute();
// LIFO
queuer.execute('back');
getConcurrency(): number
getConcurrency(): number
返回当前处理项目的并发限制。 如果提供了一个函数,则使用队列器实例调用该函数。
number
getErrorCount(): number
getErrorCount(): number
返回处理失败的项目数。
number
getExpirationCount(): number
getExpirationCount(): number
返回已过期并从队列中删除的项目数。
number
getIsEmpty(): boolean
getIsEmpty(): boolean
如果队列为空(没有待处理项目),则返回 true。
boolean
getIsFull(): boolean
getIsFull(): boolean
如果队列已满(达到 maxSize),则返回 true。
boolean
getIsIdle(): boolean
getIsIdle(): boolean
如果队列器正在运行但没有要处理的项目并且没有活动任务,则返回 true。
boolean
getIsRunning(): boolean
getIsRunning(): boolean
如果队列器当前正在运行(处理项目),则返回 true。
boolean
getNextItem(position): undefined | TValue
getNextItem(position): undefined | TValue
从队列中删除并返回下一个项目,而不执行任务函数。 用于手动队列管理。通常,使用 execute() 处理项目。
QueuePosition = ...
undefined | TValue
// FIFO
queuer.getNextItem();
// LIFO
queuer.getNextItem('back');
// FIFO
queuer.getNextItem();
// LIFO
queuer.getNextItem('back');
getOptions(): AsyncQueuerOptions<TValue>
getOptions(): AsyncQueuerOptions<TValue>
返回当前队列器选项,包括默认值和任何覆盖。
AsyncQueuerOptions<TValue>
getRejectionCount(): number
getRejectionCount(): number
返回已从队列中拒绝添加的项目数。
number
getSettledCount(): number
getSettledCount(): number
返回已完成处理(成功或错误)的项目数。
number
getSize(): number
getSize(): number
返回队列中待处理项目的数量。
number
getSuccessCount(): number
getSuccessCount(): number
返回已成功处理的项目数。
number
getWait(): number
getWait(): number
返回当前处理项目之间的等待时间(以毫秒为单位)。 如果提供了一个函数,则使用队列器实例调用该函数。
number
peekActiveItems(): TValue[]
peekActiveItems(): TValue[]
返回当前正在处理的项目(活动任务)。
TValue[]
peekAllItems(): TValue[]
peekAllItems(): TValue[]
返回队列中所有项目的副本,包括活动项目和待处理项目。
TValue[]
peekNextItem(position): undefined | TValue
peekNextItem(position): undefined | TValue
返回队列中的下一个项目,而不删除它。
QueuePosition = 'front'
undefined | TValue
queuer.peekNextItem(); // front
queuer.peekNextItem('back'); // back
queuer.peekNextItem(); // front
queuer.peekNextItem('back'); // back
peekPendingItems(): TValue[]
peekPendingItems(): TValue[]
返回等待处理的项目(待处理任务)。
TValue[]
reset(withInitialItems?): void
reset(withInitialItems?): void
将队列器重置为其初始状态。可选地使用初始项目重新填充。 不影响回调或选项。
boolean
void
setOptions(newOptions): void
setOptions(newOptions): void
更新队列器选项。新选项将与现有选项合并。
Partial<AsyncQueuerOptions<TValue>>
void
start(): void
start(): void
开始处理队列中的项目。如果已在运行,则不执行任何操作。
void
stop(): void
stop(): void
停止处理队列中的项目。不清除队列。
void