Skip to content

Commit f4e5e83

Browse files
authored
Merge pull request #2 from shotlom/master
Promises
2 parents db3f03f + 96fd3bd commit f4e5e83

1 file changed

Lines changed: 30 additions & 35 deletions

File tree

index.js

Lines changed: 30 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -9,49 +9,44 @@ const NS_PER_SEC = 1e9;
99
const workerPath = path.resolve('factorial-worker.js');
1010

1111
const calculateFactorialWithWorker = number => {
12+
// Insert the array preparation code.
1213
if (number === 0) {
1314
return 1;
1415
}
15-
return new Promise(async (parentResolve, parentReject) => {
16-
const numbers = [];
17-
for (let i = 1n; i <= number; i++) {
18-
numbers.push(i);
19-
}
16+
const numbers = [];
2017

21-
const segmentSize = Math.ceil(numbers.length / userCPUCount);
22-
const segments = [];
18+
for (let i = 1n; i <= number; i++) {
19+
numbers.push(i);
20+
}
2321

24-
console.log(numbers.length, userCPUCount, segmentSize);
22+
const segmentSize = Math.ceil(numbers.length / userCPUCount);
23+
const segments = [];
2524

26-
for (let segmentIndex = 0; segmentIndex < userCPUCount; segmentIndex++) {
27-
const start = segmentIndex * segmentSize;
28-
const end = start + segmentSize;
29-
const segment = numbers.slice(start, end);
30-
segments.push(segment);
31-
}
25+
console.log(numbers.length, userCPUCount, segmentSize);
26+
27+
for (let segmentIndex = 0; segmentIndex < userCPUCount; segmentIndex++) {
28+
const start = segmentIndex * segmentSize;
29+
const end = start + segmentSize;
30+
const segment = numbers.slice(start, end);
31+
segments.push(segment);
32+
}
3233

33-
try {
34-
const results = await Promise.all(
35-
segments.map(
36-
segment =>
37-
new Promise((resolve, reject) => {
38-
const worker = new Worker(workerPath, {
39-
workerData: segment,
40-
});
41-
worker.on('message', resolve);
42-
worker.on('error', reject);
43-
worker.on('exit', code => {
44-
if (code !== 0) reject(new Error(`Worker stopped with exit code ${code}`));
45-
});
46-
})
47-
)
48-
);
34+
var promises = segments.map(
35+
segment =>
36+
new Promise((resolve, reject) => {
37+
const worker = new Worker(workerPath, {
38+
workerData: segment,
39+
});
40+
worker.on('message', resolve);
41+
worker.on('error', reject);
42+
worker.on('exit', code => {
43+
if (code !== 0) reject(new Error(`Worker stopped with exit code ${code}`));
44+
});
45+
})
46+
)
4947

50-
const finalResult = results.reduce((acc, val) => acc * val, 1n);
51-
parentResolve(finalResult);
52-
} catch (e) {
53-
parentReject(e);
54-
}
48+
return Promise.all(promises).then(results => {
49+
return results.reduce((acc, val) => acc * val, 1n);
5550
});
5651
};
5752

0 commit comments

Comments
 (0)