| 12345678910111213141516171819202122232425262728293031323334353637383940414243 | var iterate    = require('./lib/iterate.js')  , initState  = require('./lib/state.js')  , terminator = require('./lib/terminator.js')  ;// Public APImodule.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);}
 |