Skip to content

Commit dd05779

Browse files
committed
重构 AsyncQueue 类,使用类型别名简化 resolve 和 reject 方法的定义
1 parent fb5c731 commit dd05779

File tree

1 file changed

+8
-6
lines changed

1 file changed

+8
-6
lines changed

src/index.ts

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
1+
type Resolver = (value?: unknown) => void;
2+
type Rejector = (reason?: unknown) => void;
3+
14
interface Task {
25
task: Function;
36
args: unknown[];
4-
resolve: (value: unknown) => void;
5-
reject: (reason: unknown) => void;
7+
resolve: Resolver;
8+
reject: Rejector;
69
}
710

811
type Promisify<T> = T extends Promise<any> ? T : Promise<T>;
@@ -45,7 +48,7 @@ export class AsyncQueue implements Disposable {
4548
* Resolvers waiting for all tasks to complete
4649
* @internal
4750
*/
48-
private _pendingResolves: (() => void)[] = [];
51+
private _pendingResolves: Array<{ resolve: Resolver; reject: Rejector }> = [];
4952

5053
/**
5154
* Creates an AsyncQueue instance.
@@ -78,7 +81,7 @@ export class AsyncQueue implements Disposable {
7881
// Queue is empty, resolve pending promises
7982
if (this._running === 0) {
8083
const pending = this._pendingResolves.splice(0);
81-
pending.forEach((resolve) => resolve());
84+
pending.forEach(({ resolve }) => resolve());
8285
}
8386
return;
8487
}
@@ -152,7 +155,7 @@ export class AsyncQueue implements Disposable {
152155
waitForAll(): Promise<void> {
153156
return this._running === 0 && this._queue.length === 0
154157
? Promise.resolve()
155-
: new Promise((resolve) => this._pendingResolves.push(resolve));
158+
: new Promise((resolve, reject) => this._pendingResolves.push({ resolve, reject }));
156159
}
157160

158161
/** Disposes of the queue, rejecting any pending tasks. */
@@ -161,7 +164,6 @@ export class AsyncQueue implements Disposable {
161164
const { reject } = this._queue.shift() as Task;
162165
reject(new Error("Queue disposed before execution."));
163166
}
164-
this._pendingResolves.length = 0;
165167
}
166168

167169
/** Implements Disposable interface cleanup. */

0 commit comments

Comments
 (0)