Skip to content
This repository was archived by the owner on Feb 11, 2021. It is now read-only.

Commit 4ffdb0e

Browse files
committed
Check multiple primes at once.
Modified the middleware to track multiple workers for each number all at the same time. This allows separate simultaneous evaluation of numbers.
1 parent f92c3c9 commit 4ffdb0e

File tree

2 files changed

+33
-24
lines changed

2 files changed

+33
-24
lines changed

examples/simple/middleware/primesMiddleware.js

Lines changed: 31 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,45 @@
11
import { 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

57
function 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

6372
export default createPrimesMiddleware;

examples/simple/triggers/primeStateTriggers.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
// TODO: Switch this out with a proper import from the module when it's ready.
22
import { addTrigger } from '../../../src';
3-
import { checkNextPrimeAction } from '../middleware/primesMiddleware';
3+
import { checkPrimesAction } from '../middleware/primesMiddleware';
44

55
const REMOVE_FROM_QUEUE = 'REMOVE_FROM_QUEUE';
66

@@ -16,7 +16,7 @@ export function addQueueTrigger() {
1616
queueMatcher,
1717
( match ) => {
1818
return [
19-
checkNextPrimeAction(),
19+
checkPrimesAction(),
2020
addQueueTrigger(),
2121
];
2222
}

0 commit comments

Comments
 (0)