File tree 1 file changed +16
-4
lines changed
1 file changed +16
-4
lines changed Original file line number Diff line number Diff line change @@ -7,7 +7,7 @@ export default async function pMap(
7
7
signal,
8
8
} = { } ,
9
9
) {
10
- return new Promise ( ( resolve , reject_ ) => {
10
+ return new Promise ( ( resolve_ , reject_ ) => {
11
11
if ( iterable [ Symbol . iterator ] === undefined && iterable [ Symbol . asyncIterator ] === undefined ) {
12
12
throw new TypeError ( `Expected \`input\` to be either an \`Iterable\` or \`AsyncIterable\`, got (${ typeof iterable } )` ) ;
13
13
}
@@ -30,20 +30,32 @@ export default async function pMap(
30
30
let currentIndex = 0 ;
31
31
const iterator = iterable [ Symbol . iterator ] === undefined ? iterable [ Symbol . asyncIterator ] ( ) : iterable [ Symbol . iterator ] ( ) ;
32
32
33
+ const signalListener = ( ) => {
34
+ reject ( signal . reason ) ;
35
+ } ;
36
+
37
+ const cleanup = ( ) => {
38
+ signal ?. removeEventListener ( 'abort' , signalListener ) ;
39
+ } ;
40
+
41
+ const resolve = value => {
42
+ resolve_ ( value ) ;
43
+ cleanup ( ) ;
44
+ } ;
45
+
33
46
const reject = reason => {
34
47
isRejected = true ;
35
48
isResolved = true ;
36
49
reject_ ( reason ) ;
50
+ cleanup ( ) ;
37
51
} ;
38
52
39
53
if ( signal ) {
40
54
if ( signal . aborted ) {
41
55
reject ( signal . reason ) ;
42
56
}
43
57
44
- signal . addEventListener ( 'abort' , ( ) => {
45
- reject ( signal . reason ) ;
46
- } ) ;
58
+ signal . addEventListener ( 'abort' , signalListener , { once : true } ) ;
47
59
}
48
60
49
61
const next = async ( ) => {
You can’t perform that action at this time.
0 commit comments