Skip to content

Commit 65e893e

Browse files
authored
Fix cleaning up abort listener (#81)
1 parent a38d5a7 commit 65e893e

File tree

1 file changed

+16
-4
lines changed

1 file changed

+16
-4
lines changed

index.js

+16-4
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ export default async function pMap(
77
signal,
88
} = {},
99
) {
10-
return new Promise((resolve, reject_) => {
10+
return new Promise((resolve_, reject_) => {
1111
if (iterable[Symbol.iterator] === undefined && iterable[Symbol.asyncIterator] === undefined) {
1212
throw new TypeError(`Expected \`input\` to be either an \`Iterable\` or \`AsyncIterable\`, got (${typeof iterable})`);
1313
}
@@ -30,20 +30,32 @@ export default async function pMap(
3030
let currentIndex = 0;
3131
const iterator = iterable[Symbol.iterator] === undefined ? iterable[Symbol.asyncIterator]() : iterable[Symbol.iterator]();
3232

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+
3346
const reject = reason => {
3447
isRejected = true;
3548
isResolved = true;
3649
reject_(reason);
50+
cleanup();
3751
};
3852

3953
if (signal) {
4054
if (signal.aborted) {
4155
reject(signal.reason);
4256
}
4357

44-
signal.addEventListener('abort', () => {
45-
reject(signal.reason);
46-
});
58+
signal.addEventListener('abort', signalListener, {once: true});
4759
}
4860

4961
const next = async () => {

0 commit comments

Comments
 (0)