框架
版本
Debouncer API 参考
Throttler API 参考
速率限制器 API 参考
队列 API 参考
批处理器 API 参考
批处理器示例

Queuer

类:Queuer<TValue>

定义于:queuer.ts:160

一个灵活的队列,用于处理具有可配置等待时间、过期时间和优先级的项目。

特性:

  • 自动或手动处理项目
  • FIFO(先进先出)、LIFO(后进先出)或双端队列行为
  • 提供 getPriority 时基于优先级的排序
  • 项目过期和删除过时项目
  • 队列状态更改、执行、拒绝和过期的回调

运行行为:

  • start():开始自动处理队列中的项目(默认为运行)
  • stop():暂停处理但保持队列状态
  • wait:处理项目之间的可配置延迟
  • onItemsChange/onExecute:用于监控队列状态的回调

禁用自动处理时也支持手动处理:

  • execute():使用提供的函数处理下一个项目
  • getNextItem():删除并返回下一个项目而不进行处理

队列行为默认为 FIFO:

  • addItem(item):添加到队列末尾
  • 项目从队列前面处理

优先级队列:

  • 提供 getPriority 函数;值越高,优先级越高

堆栈 (LIFO):

  • addItem(item, 'back'):添加到后面
  • getNextItem('back'):从后面删除

双端队列:

  • addItem(item, position):添加到指定位置 ('front'/'back')
  • getNextItem(position):从指定位置删除

项目过期:

  • expirationDuration:项目可以在队列中停留的最长时间
  • getIsExpired:覆���默认过期时间的函数
  • onExpire:过期项目的回调

示例用法:

ts
// 具有等待时间的自动处理队列
const autoQueue = new Queuer<number>((n) => console.log(n), {
  started: true, // 立即开始处理
  wait: 1000, // 项目之间等待 1 秒
  onExecute: (item) => console.log(`已处理 ${item}`)
});
autoQueue.addItem(1); // 将在 1 秒后处理
autoQueue.addItem(2); // 将在第一个项目后 1 秒处理

// 手动处理队列
const manualQueue = new Queuer<number>((n) => console.log(n), {
  started: false
});
manualQueue.addItem(1); // [1]
manualQueue.addItem(2); // [1, 2]
manualQueue.execute(); // 输出 1,队列为 [2]
manualQueue.getNextItem(); // 返回 2,队列为空
// 具有等待时间的自动处理队列
const autoQueue = new Queuer<number>((n) => console.log(n), {
  started: true, // 立即开始处理
  wait: 1000, // 项目之间等待 1 秒
  onExecute: (item) => console.log(`已处理 ${item}`)
});
autoQueue.addItem(1); // 将在 1 秒后处理
autoQueue.addItem(2); // 将在第一个项目后 1 秒处理

// 手动处理队列
const manualQueue = new Queuer<number>((n) => console.log(n), {
  started: false
});
manualQueue.addItem(1); // [1]
manualQueue.addItem(2); // [1, 2]
manualQueue.execute(); // 输出 1,队列为 [2]
manualQueue.getNextItem(); // 返回 2,队列为空

类型参数

TValue

构造函数

new Queuer()

ts
new Queuer<TValue>(fn, initialOptions): Queuer<TValue>
new Queuer<TValue>(fn, initialOptions): Queuer<TValue>

定义于:queuer.ts:171

参数

fn

(item) => void

initialOptions

QueuerOptions<TValue> = {}

返回

Queuer<TValue>

方法

addItem()

ts
addItem(
   item, 
   position, 
   runOnUpdate): boolean
addItem(
   item, 
   position, 
   runOnUpdate): boolean

定义于:queuer.ts:343

将项目添加到队列。如果队列已满,则拒绝该项目并调用 onReject。 可以根据优先级或根据配置在前面/后面插入项目。

如果项目已添加,则返回 true;如果队列已满,则返回 false。

示例用法:

ts
queuer.addItem('task');
queuer.addItem('task2', 'front');
queuer.addItem('task');
queuer.addItem('task2', 'front');

参数

item

TValue

position

QueuePosition = ...

runOnUpdate

boolean = true

返回

boolean


clear()

ts
clear(): void
clear(): void

定义于:queuer.ts:313

从队列中删除所有待处理项目。不影响正在处理的项目。

返回

void


execute()

ts
execute(position?): undefined | TValue
execute(position?): undefined | TValue

定义于:queuer.ts:431

从队列中删除并返回下一个项目,并使用提供的函数对其进行处理。

示例用法:

ts
queuer.execute();
// LIFO
queuer.execute('back');
queuer.execute();
// LIFO
queuer.execute('back');

参数

position?

QueuePosition

返回

undefined | TValue


getExecutionCount()

ts
getExecutionCount(): number
getExecutionCount(): number

定义于:queuer.ts:490

返回已处理并从队列中删除的项目数。

返回

number


getExpirationCount()

ts
getExpirationCount(): number
getExpirationCount(): number

定义于:queuer.ts:504

返回已过期并从队列中删除的项目数。

返回

number


getIsEmpty()

ts
getIsEmpty(): boolean
getIsEmpty(): boolean

定义于:queuer.ts:462

如果队列为空(没有待处理项目),则返回 true。

返回

boolean


getIsFull()

ts
getIsFull(): boolean
getIsFull(): boolean

定义于:queuer.ts:469

如果队列已满(达到 maxSize),则返回 true。

返回

boolean


getIsIdle()

ts
getIsIdle(): boolean
getIsIdle(): boolean

定义于:queuer.ts:518

如果队列器正在运行但没有要处理的项目,则返回 true。

返回

boolean


getIsRunning()

ts
getIsRunning(): boolean
getIsRunning(): boolean

定义于:queuer.ts:511

如果队列器当前正在运行(处理项目),则返回 true。

返回

boolean


getNextItem()

ts
getNextItem(position): undefined | TValue
getNextItem(position): undefined | TValue

定义于:queuer.ts:401

从队列中删除并返回下一个项目,而不执行该函数。 用于手动队列管理。通常,使用 execute() 处理项目。

示例用法:

ts
// FIFO
queuer.getNextItem();
// LIFO
queuer.getNextItem('back');
// FIFO
queuer.getNextItem();
// LIFO
queuer.getNextItem('back');

参数

position

QueuePosition = ...

返回

undefined | TValue


getOptions()

ts
getOptions(): Required<QueuerOptions<TValue>>
getOptions(): Required<QueuerOptions<TValue>>

定义于:queuer.ts:195

返回当前队列器选项,包括默认值和任何覆盖。

返回

Required<QueuerOptions<TValue>>


getRejectionCount()

ts
getRejectionCount(): number
getRejectionCount(): number

定义于:queuer.ts:497

返回已从队列中拒绝添加的项目数。

返回

number


getSize()

ts
getSize(): number
getSize(): number

定义于:queuer.ts:476

返回队列中待处理项目的数量。

返回

number


getWait()

ts
getWait(): number
getWait(): number

定义于:queuer.ts:203

返回当前处理项目之间的等待时间(以毫秒为单位)。 如果提供了一个函数,则使用队列器实例调用该函数。

返回

number


peekAllItems()

ts
peekAllItems(): TValue[]
peekAllItems(): TValue[]

定义于:queuer.ts:483

返回队列中所有项目的副本。

返回

TValue[]


peekNextItem()

ts
peekNextItem(position): undefined | TValue
peekNextItem(position): undefined | TValue

定义于:queuer.ts:450

返回队列中的下一个项目,而不删除它。

示例用法:

ts
queuer.peekNextItem(); // front
queuer.peekNextItem('back'); // back
queuer.peekNextItem(); // front
queuer.peekNextItem('back'); // back

参数

position

QueuePosition = ...

返回

undefined | TValue


reset()

ts
reset(withInitialItems?): void
reset(withInitialItems?): void

定义于:queuer.ts:322

将队列器重置为其初始状态。可选地使用初始项目重新填充。 不影响回调或选项。

参数

withInitialItems?

boolean

返回

void


setOptions()

ts
setOptions(newOptions): void
setOptions(newOptions): void

定义于:queuer.ts:188

更新队列器选项。新选项将与现有选项合并。

参数

newOptions

Partial<QueuerOptions<TValue>>

返回

void


start()

ts
start(): void
start(): void

定义于:queuer.ts:301

开始处理队列中的项目。如果已在运行,则不执行任何操作。

返回

void


stop()

ts
stop(): void
stop(): void

定义于:queuer.ts:292

停止处理队列中的项目。不清除队列。

返回

void