@@ -11,6 +11,7 @@ export class WaitGroup {
11
11
}
12
12
++ this . #counter;
13
13
}
14
+
14
15
leave ( ) {
15
16
if ( this . #counter <= 0 || ! this . #resolve) {
16
17
throw new Error ( 'leave() called without a matching enter()' ) ;
@@ -21,11 +22,10 @@ export class WaitGroup {
21
22
this . #resolve = undefined ;
22
23
}
23
24
}
25
+
24
26
async wait ( abortSignal ?: AbortSignal ) {
25
27
if ( abortSignal ) {
26
- await abortPromise ( abortSignal , async ( ) => {
27
- await this . #promise;
28
- } ) ;
28
+ await abortPromise ( abortSignal , this . #promise) ;
29
29
} else {
30
30
await this . #promise;
31
31
}
@@ -36,18 +36,16 @@ export class WaitGroup {
36
36
}
37
37
}
38
38
39
- async function abortPromise ( abortSignal : AbortSignal , f : ( ) => Promise < void > ) {
40
- return new Promise ( ( resolve , reject ) => {
39
+ async function abortPromise < T > ( abortSignal : AbortSignal , promise : Promise < T > ) {
40
+ return new Promise < T > ( ( resolve , reject ) => {
41
41
if ( abortSignal . aborted ) {
42
- // eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors
43
- reject ( abortSignal . reason ) ;
42
+ reject ( abortSignal . reason as Error ) ;
44
43
return ;
45
44
}
46
45
47
46
const onAbort = ( ) => {
48
47
cleanup ( ) ;
49
- // eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors
50
- reject ( abortSignal . reason ) ;
48
+ reject ( abortSignal . reason as Error ) ;
51
49
} ;
52
50
53
51
const cleanup = ( ) => {
@@ -56,15 +54,14 @@ async function abortPromise(abortSignal: AbortSignal, f: () => Promise<void>) {
56
54
57
55
abortSignal . addEventListener ( 'abort' , onAbort ) ;
58
56
59
- f ( ) . then (
57
+ promise . then (
60
58
value => {
61
59
cleanup ( ) ;
62
60
resolve ( value ) ;
63
61
} ,
64
62
( error : unknown ) => {
65
63
cleanup ( ) ;
66
- // eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors
67
- reject ( error ) ;
64
+ reject ( error as Error ) ;
68
65
} ,
69
66
) ;
70
67
} ) ;
0 commit comments