@@ -9,49 +9,44 @@ const NS_PER_SEC = 1e9;
99const workerPath = path . resolve ( 'factorial-worker.js' ) ;
1010
1111const 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