1
+ type Resolver = ( value ?: unknown ) => void ;
2
+ type Rejector = ( reason ?: unknown ) => void ;
3
+
1
4
interface Task {
2
5
task : Function ;
3
6
args : unknown [ ] ;
4
- resolve : ( value : unknown ) => void ;
5
- reject : ( reason : unknown ) => void ;
7
+ resolve : Resolver ;
8
+ reject : Rejector ;
6
9
}
7
10
8
11
type Promisify < T > = T extends Promise < any > ? T : Promise < T > ;
@@ -45,7 +48,7 @@ export class AsyncQueue implements Disposable {
45
48
* Resolvers waiting for all tasks to complete
46
49
* @internal
47
50
*/
48
- private _pendingResolves : ( ( ) => void ) [ ] = [ ] ;
51
+ private _pendingResolves : Array < { resolve : Resolver ; reject : Rejector } > = [ ] ;
49
52
50
53
/**
51
54
* Creates an AsyncQueue instance.
@@ -78,7 +81,7 @@ export class AsyncQueue implements Disposable {
78
81
// Queue is empty, resolve pending promises
79
82
if ( this . _running === 0 ) {
80
83
const pending = this . _pendingResolves . splice ( 0 ) ;
81
- pending . forEach ( ( resolve ) => resolve ( ) ) ;
84
+ pending . forEach ( ( { resolve } ) => resolve ( ) ) ;
82
85
}
83
86
return ;
84
87
}
@@ -152,7 +155,7 @@ export class AsyncQueue implements Disposable {
152
155
waitForAll ( ) : Promise < void > {
153
156
return this . _running === 0 && this . _queue . length === 0
154
157
? Promise . resolve ( )
155
- : new Promise ( ( resolve ) => this . _pendingResolves . push ( resolve ) ) ;
158
+ : new Promise ( ( resolve , reject ) => this . _pendingResolves . push ( { resolve, reject } ) ) ;
156
159
}
157
160
158
161
/** Disposes of the queue, rejecting any pending tasks. */
@@ -161,7 +164,6 @@ export class AsyncQueue implements Disposable {
161
164
const { reject } = this . _queue . shift ( ) as Task ;
162
165
reject ( new Error ( "Queue disposed before execution." ) ) ;
163
166
}
164
- this . _pendingResolves . length = 0 ;
165
167
}
166
168
167
169
/** Implements Disposable interface cleanup. */
0 commit comments