1 var iterate = require('./lib/iterate.js')
2 , initState = require('./lib/state.js')
3 , terminator = require('./lib/terminator.js')
7 module.exports = parallel;
10 * Runs iterator over provided array elements in parallel
12 * @param {array|object} list - array or object (named list) to iterate over
13 * @param {function} iterator - iterator to run
14 * @param {function} callback - invoked when all elements processed
15 * @returns {function} - jobs terminator
17 function parallel(list, iterator, callback)
19 var state = initState(list);
21 while (state.index < (state['keyedList'] || list).length)
23 iterate(list, iterator, state, function(error, result)
27 callback(error, result);
31 // looks like it's the last one
32 if (Object.keys(state.jobs).length === 0)
34 callback(null, state.results);
42 return terminator.bind(state, callback);