Skip to content

Commit dcf9aa7

Browse files
committed
Prevent multiple attempts to resolve the same Promise
1 parent 43705c7 commit dcf9aa7

File tree

4 files changed

+24
-0
lines changed

4 files changed

+24
-0
lines changed

src/every.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,26 @@
11
import asyncForEach from './forEach';
22

33
export default function asyncSome(arr, fn) {
4+
let resolved;
45
return new Promise((resolve) => {
56
asyncForEach(
67
arr,
78
(cur, idx, arr2) =>
89
new Promise((resolve2) => {
10+
if (resolved) {
11+
return;
12+
}
913
fn(cur, idx, arr2).then((result) => {
1014
if (!result) {
1115
resolve(false);
16+
resolved = true;
1217
}
1318
resolve2();
1419
});
1520
}),
1621
).then(() => {
1722
resolve(true);
23+
resolved = true;
1824
});
1925
});
2026
}

src/every_strict.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,26 @@
11
import asyncForEachStrict from './forEach_strict';
22

33
export default function asyncEveryStrict(arr, fn) {
4+
let resolved;
45
return new Promise((resolve) => {
56
asyncForEachStrict(
67
arr,
78
(cur, idx, arr2) =>
89
new Promise((resolve2) => {
10+
if (resolved) {
11+
return;
12+
}
913
fn(cur, idx, arr2).then((result) => {
1014
if (!result) {
1115
resolve(false);
16+
resolved = true;
1217
}
1318
resolve2();
1419
});
1520
}),
1621
).then(() => {
1722
resolve(true);
23+
resolved = true;
1824
});
1925
});
2026
}

src/some.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,26 @@
11
import asyncForEach from './forEach';
22

33
export default function asyncSome(arr, fn) {
4+
let resolved;
45
return new Promise((resolve) => {
56
asyncForEach(
67
arr,
78
(cur, idx, arr2) =>
89
new Promise((resolve2) => {
10+
if (resolved) {
11+
return;
12+
}
913
fn(cur, idx, arr2).then((result) => {
1014
if (result) {
1115
resolve(true);
16+
resolved = true;
1217
}
1318
resolve2();
1419
});
1520
}),
1621
).then(() => {
1722
resolve(false);
23+
resolved = true;
1824
});
1925
});
2026
}

src/some_strict.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,26 @@
11
import asyncForEachStrict from './forEach_strict';
22

33
export default function asyncSomeStrict(arr, fn) {
4+
let resolved;
45
return new Promise((resolve) => {
56
asyncForEachStrict(
67
arr,
78
(cur, idx, arr2) =>
89
new Promise((resolve2) => {
10+
if (resolved) {
11+
return;
12+
}
913
fn(cur, idx, arr2).then((result) => {
1014
if (result) {
1115
resolve(true);
16+
resolved = true;
1217
}
1318
resolve2();
1419
});
1520
}),
1621
).then(() => {
1722
resolve(false);
23+
resolved = true;
1824
});
1925
});
2026
}

0 commit comments

Comments
 (0)