11import { removeQueueNumber , addPrime , addNonPrime } from '../actions/primes' ;
22
3- export const CHECK_NEXT_PRIME = 'CHECK_NEXT_PRIME' ;
3+ export const CHECK_PRIMES = 'CHECK_PRIMES' ;
4+
5+ let workers = { } ;
46
57function createPrimesMiddleware ( ) {
68 return ( store ) => ( next ) => ( action ) => {
79
810 switch ( action . type ) {
9- case CHECK_NEXT_PRIME :
11+ case CHECK_PRIMES :
1012 const { queue } = store . getState ( ) . primeState ;
11- checkNextPrime ( queue , store . dispatch ) ;
13+ checkPrimes ( queue , store . dispatch ) ;
1214 return true ;
1315 default :
1416 return next ( action ) ;
1517 }
1618 } ;
1719}
1820
19- function checkNextPrime ( queue , dispatch ) {
21+ function checkPrimes ( queue , dispatch ) {
2022 if ( queue . length > 0 ) {
21- const number = queue [ 0 ] ;
22- console . log ( 'checking next number ' + number ) ;
23- checkPrime ( number ) . then (
24- ( isPrime ) => {
25- dispatch ( removeQueueNumber ( number ) ) ;
26- if ( isPrime ) {
27- console . log ( 'number ' + number + ' is prime!' ) ;
28- dispatch ( addPrime ( number ) ) ;
29- } else {
30- console . log ( 'number ' + number + ' is not prime!' ) ;
31- dispatch ( addNonPrime ( number ) ) ;
32- }
23+
24+ queue . forEach ( ( number ) => {
25+ if ( ! workers [ number ] ) {
26+ console . log ( 'checking number ' + number ) ;
27+ checkPrime ( number ) . then (
28+ ( isPrime ) => {
29+ dispatch ( removeQueueNumber ( number ) ) ;
30+ if ( isPrime ) {
31+ console . log ( 'number ' + number + ' is prime!' ) ;
32+ dispatch ( addPrime ( number ) ) ;
33+ } else {
34+ console . log ( 'number ' + number + ' is not prime!' ) ;
35+ dispatch ( addNonPrime ( number ) ) ;
36+ }
37+ }
38+ ) ;
3339 }
34- ) ;
40+ } ) ;
41+
42+ const number = queue [ 0 ] ;
3543 }
3644}
3745
@@ -41,23 +49,24 @@ function checkPrime( number ) {
4149 ( resolve , reject ) => {
4250 // Create a worker to do the actual mathematical operations.
4351 const worker = new Worker ( '/static/worker-primes.js' ) ;
52+ workers [ number ] = worker ;
53+ console . log ( 'Worker created' ) ;
54+ console . log ( worker ) ;
4455
4556 worker . onmessage = function ( evt ) {
4657 console . log ( 'message received from worker.' ) ;
4758 console . log ( evt ) ;
59+ delete workers [ number ] ;
4860 resolve ( evt . data ) ;
4961 }
5062
51- console . log ( 'Worker created' ) ;
52- console . log ( worker ) ;
53-
5463 worker . postMessage ( Number ( number ) ) ;
5564 }
5665 ) ;
5766}
5867
59- export function checkNextPrimeAction ( ) {
60- return { type : CHECK_NEXT_PRIME } ;
68+ export function checkPrimesAction ( ) {
69+ return { type : CHECK_PRIMES } ;
6170}
6271
6372export default createPrimesMiddleware ;
0 commit comments