框架
版本
防抖器 API 参考
节流器 API 参考
速率限制器 API 参考
队列 API 参考
批处理器 API 参考

异步排队器

类: AsyncQueuer<TValue>

定义于: async-queuer.ts:271

一个灵活的异步队列,用于处理具有可配置并发、优先级和过期的任务。

特性

  • 通过 getPriority 选项支持优先级队列
  • 可配置的并发限制
  • 用于任务成功、错误、完成和队列状态更改的回调
  • FIFO(先进先出)或 LIFO(后进先出)队列行为
  • 暂停和恢复处理
  • 任务取消
  • 项目过期,用于从队列中删除陈旧的项目

任务的处理并发度最高可达配置的并发限制。当任务完成时,如果并发限制允许,则处理下一个待处理的任务。

错误处理

  • 如果提供了 onError 处理程序,它将接收错误和 queuer 实例作为参数。
  • 如果 throwOnError 为 true(当没有提供 onError 处理程序时的默认值),错误将被抛出
  • 如果 throwOnError 为 false(当提供 onError 处理程序时的默认值),错误将被吞没
  • onError 和 throwOnError 可以一起使用;处理程序将在任何错误被抛出之前被调用。
  • 可以使用 AsyncQueuer 实例检查错误状态

状态管理

  • 使用 TanStack Store 进行响应式状态管理
  • 使用 initialState 在创建异步队列时提供初始状态值
  • 使用 onSuccess 回调来响应成功的任务执行并实现自定义逻辑
  • 使用 onError 回调来响应任务执行错误并实现自定义错误处理
  • 使用 onSettled 回调来响应任务执行完成(成功或错误)并实现自定义逻辑
  • 使用 onItemsChange 回调来响应添加到队列或从队列中移除的项目。
  • 使用 onExpire 回调来响应项目过期并实现自定义逻辑。
  • 使用 onReject 回调来响应队列已满时被拒绝的项目。
  • 状态包括错误计数、过期计数、拒绝计数、运行状态以及成功/结算计数
  • 在使用类直接时,可以通过 asyncQueuer.store.state 访问状态
  • 在使用框架适配器(React/Solid)时,状态从 asyncQueuer.state 访问

用法示例

ts
const asyncQueuer = new AsyncQueuer<string>(async (item) => {
  // process item
  return item.toUpperCase();
}, {
  concurrency: 2,
  onSuccess: (result) => {
    console.log(result);
  }
});

asyncQueuer.addItem('hello');
asyncQueuer.start();
const asyncQueuer = new AsyncQueuer<string>(async (item) => {
  // process item
  return item.toUpperCase();
}, {
  concurrency: 2,
  onSuccess: (result) => {
    console.log(result);
  }
});

asyncQueuer.addItem('hello');
asyncQueuer.start();

类型参数

TValue

构造函数

new AsyncQueuer()

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

定义于: async-queuer.ts:279

参数

fn

(item) => Promise<any>

initialOptions

AsyncQueuerOptions<TValue> = {}

Returns (返回)

AsyncQueuer<TValue>

属性

fn()

ts
fn: (item) => Promise<any>;
fn: (item) => Promise<any>;

定义于: async-queuer.ts:280

参数

item

TValue

Returns (返回)

Promise<any>


key

ts
key: string;
key: string;

定义于: async-queuer.ts:275


options

ts
options: AsyncQueuerOptions<TValue>;
options: AsyncQueuerOptions<TValue>;

定义于: async-queuer.ts:276


store

ts
readonly store: Store<Readonly<AsyncQueuerState<TValue>>>;
readonly store: Store<Readonly<AsyncQueuerState<TValue>>>;

定义于: async-queuer.ts:272

方法

addItem()

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

定义于: async-queuer.ts:421

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

参数

item

TValue

位置

QueuePosition = ...

runOnItemsChange

boolean = true

Returns (返回)

boolean

示例

ts
queuer.addItem({ value: 'task', priority: 10 });
queuer.addItem('task2', 'front');
queuer.addItem({ value: 'task', priority: 10 });
queuer.addItem('task2', 'front');

clear()

ts
clear(): void
clear(): void

定义于: async-queuer.ts:734

移除队列中的所有待处理项目。不影响活动任务。

Returns (返回)

void


execute()

ts
execute(position?): Promise<any>
execute(position?): Promise<any>

定义于: async-queuer.ts:556

从队列中移除并返回下一个项目,并用其执行任务函数。

参数

position?

QueuePosition

Returns (返回)

Promise<any>

示例

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

flush()

ts
flush(numberOfItems, position?): Promise<void>
flush(numberOfItems, position?): Promise<void>

定义于: async-queuer.ts:591

立即处理指定数量的项目,无需等待。如果未提供 numberOfItems,则处理所有项目。

参数

numberOfItems

number = ...

position?

QueuePosition

Returns (返回)

Promise<void>


flushAsBatch()

ts
flushAsBatch(batchFunction): Promise<void>
flushAsBatch(batchFunction): Promise<void>

定义于: async-queuer.ts:605

使用提供的函数作为参数,将队列中的所有项目作为批次进行处理。处理后队列将被清空。

参数

batchFunction

(items) => Promise<any>

Returns (返回)

Promise<void>


getNextItem()

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

定义于: async-queuer.ts:504

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

参数

position

QueuePosition = ...

Returns (返回)

undefined | TValue

示例

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

peekActiveItems()

ts
peekActiveItems(): TValue[]
peekActiveItems(): TValue[]

定义于: async-queuer.ts:697

返回当前正在处理的项目(活动任务)。

Returns (返回)

TValue[]


peekAllItems()

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

定义于: async-queuer.ts:690

返回队列中的所有项目副本,包括活动项目和待处理项目。

Returns (返回)

TValue[]


peekNextItem()

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

定义于: async-queuer.ts:680

在不移除的情况下返回队列中的下一个项目。

参数

position

QueuePosition = 'front'

Returns (返回)

undefined | TValue

示例

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

peekPendingItems()

ts
peekPendingItems(): TValue[]
peekPendingItems(): TValue[]

定义于: async-queuer.ts:704

返回等待处理的项目(待处理任务)。

Returns (返回)

TValue[]


reset()

ts
reset(): void
reset(): void

定义于: async-queuer.ts:742

将队列器状态重置为默认值

Returns (返回)

void


setOptions()

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

定义于: async-queuer.ts:318

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

参数

newOptions

Partial<AsyncQueuerOptions<TValue>>

Returns (返回)

void


start()

ts
start(): void
start(): void

定义于: async-queuer.ts:711

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

Returns (返回)

void


stop()

ts
stop(): void
stop(): void

定义于: async-queuer.ts:721

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

Returns (返回)

void

我们的合作伙伴
Code Rabbit
Unkey
订阅 Bytes

您的每周 JavaScript 资讯。每周一免费发送给超过 10 万开发者。

Bytes

无垃圾邮件。您可以随时取消订阅。

订阅 Bytes

您的每周 JavaScript 资讯。每周一免费发送给超过 10 万开发者。

Bytes

无垃圾邮件。您可以随时取消订阅。