跳到主要内容

AsyncQueueExecutor

Defined in: packages/utils/src/async/AsyncQueueExecutor.ts:38

有并发上限的异步任务队列。

任务按入队顺序开始执行,但完成顺序取决于各自耗时,不保证有序。 单个任务失败只让它自己的 Promise reject,不影响队列继续消费后续任务。

Example​

const executor = new AsyncQueueExecutor(2);
const result = await executor.addTask(() => fetch(url));
await executor.waitForAll();

Constructors​

Constructor​

new AsyncQueueExecutor(maxConcurrent?): AsyncQueueExecutor;

Defined in: packages/utils/src/async/AsyncQueueExecutor.ts:49

Parameters​

ParameterTypeDefault valueDescription
maxConcurrentnumber3并发上限,默认 3

Returns​

AsyncQueueExecutor

Throws​

RangeError maxConcurrent 不是正的安全整数

Methods​

addTask()​

addTask<T>(task, id?): Promise<T>;

Defined in: packages/utils/src/async/AsyncQueueExecutor.ts:65

入队一个任务,返回其结果。

传了 id 且同 id 的任务尚未结算时,直接复用已有 Promise,不会重复执行; 任务结算(无论成功失败)后同一个 id 可以再次入队。

Type Parameters​

Type Parameter
T

Parameters​

ParameterTypeDescription
task() => T | Promise<T>任务函数,可返回同步值或 Promise
id?TaskId可选去重标识

Returns​

Promise<T>

任务结果;任务抛错时以同一个异常 reject; 排队期间被 AsyncQueueExecutor.clearQueue 取消时以 Error('Task cancelled: queue cleared') reject


clearQueue()​

clearQueue(): void;

Defined in: packages/utils/src/async/AsyncQueueExecutor.ts:122

清空尚未开始的任务。

每个被取消任务的 Promise 以 Error('Task cancelled: queue cleared') reject, 并从去重表中移除。已在执行的任务不受影响,会继续跑完。

Returns​

void


getQueuedCount()​

getQueuedCount(): number;

Defined in: packages/utils/src/async/AsyncQueueExecutor.ts:160

仍在排队的任务数。

Returns​

number

排队中的任务数,等价于 getStatus().queued


getRunningCount()​

getRunningCount(): number;

Defined in: packages/utils/src/async/AsyncQueueExecutor.ts:151

正在执行的任务数。

Returns​

number

执行中的任务数,等价于 getStatus().running


getStatus()​

getStatus(): ExecutorStatus;

Defined in: packages/utils/src/async/AsyncQueueExecutor.ts:95

读取当前队列状态的快照。

Returns​

ExecutorStatus

执行中 / 排队中数量与当前并发上限;返回的是普通对象,不随后续变化更新


setMaxConcurrent()​

setMaxConcurrent(newMax): void;

Defined in: packages/utils/src/async/AsyncQueueExecutor.ts:111

调整并发上限。

调高会立即补跑排队中的任务;调低不会中断已在执行的任务,只影响后续调度。

Parameters​

ParameterTypeDescription
newMaxnumber新的并发上限

Returns​

void

Throws​

RangeError newMax 不是正的安全整数


waitForAll()​

waitForAll(): Promise<void>;

Defined in: packages/utils/src/async/AsyncQueueExecutor.ts:141

等待队列排空。

队列本就是空的时候立即 resolve。永远不会 reject:任务失败由 AsyncQueueExecutor.addTask 返回的 Promise 单独承担,这里只表示「都结算完了」。 排空后再入队新任务不影响已经 resolve 的 Promise,需要重新调用。

Returns​

Promise<void>

队列中执行中与排队中任务都结算后 resolve