-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathpromise-some.js
36 lines (32 loc) · 873 Bytes
/
promise-some.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
const promiseSome = promises => (
new Promise((resolve, reject) => {
const result = [];
let numberOfFulfilled = 0;
const addValue = (value, index, resolved) => {
result[index] = { value, resolved };
numberOfFulfilled += 1;
};
const fulfillIfLast = () => {
if (numberOfFulfilled === promises.length) {
const allRejected = promises.length === result.filter((r => !r.resolved)).length;
if (allRejected) {
reject(result);
} else {
resolve(result);
}
}
};
promises.forEach((promise, index) => {
promise
.then(((value) => {
addValue(value, index, true);
fulfillIfLast();
}))
.catch((error) => {
addValue(error, index, false);
fulfillIfLast();
});
});
})
);
export default promiseSome;