Spaces:
Running
Running
var iterate = require('./lib/iterate.js') | |
, initState = require('./lib/state.js') | |
, terminator = require('./lib/terminator.js') | |
; | |
// Public API | |
module.exports = parallel; | |
/** | |
* Runs iterator over provided array elements in parallel | |
* | |
* @param {array|object} list - array or object (named list) to iterate over | |
* @param {function} iterator - iterator to run | |
* @param {function} callback - invoked when all elements processed | |
* @returns {function} - jobs terminator | |
*/ | |
function parallel(list, iterator, callback) | |
{ | |
var state = initState(list); | |
while (state.index < (state['keyedList'] || list).length) | |
{ | |
iterate(list, iterator, state, function(error, result) | |
{ | |
if (error) | |
{ | |
callback(error, result); | |
return; | |
} | |
// looks like it's the last one | |
if (Object.keys(state.jobs).length === 0) | |
{ | |
callback(null, state.results); | |
return; | |
} | |
}); | |
state.index++; | |
} | |
return terminator.bind(state, callback); | |
} | |