1+ type Resolver = ( value ?: unknown ) => void ;
2+ type Rejector = ( reason ?: unknown ) => void ;
3+
14interface 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
811type 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