opusdev/vector-similarity-api
1
1var iterate = require('./lib/iterate.js')2 , initState = require('./lib/state.js')3 , terminator = require('./lib/terminator.js')4 ;5 6// Public API7module.exports = parallel;8 9/**10 * Runs iterator over provided array elements in parallel11 *12 * @param {array|object} list - array or object (named list) to iterate over13 * @param {function} iterator - iterator to run14 * @param {function} callback - invoked when all elements processed15 * @returns {function} - jobs terminator16 */17function parallel(list, iterator, callback)18{19 var state = initState(list);20 21 while (state.index < (state['keyedList'] || list).length)22 {23 iterate(list, iterator, state, function(error, result)24 {25 if (error)26 {27 callback(error, result);28 return;29 }30 31 // looks like it's the last one32 if (Object.keys(state.jobs).length === 0)33 {34 callback(null, state.results);35 return;36 }37 });38 39 state.index++;40 }41 42 return terminator.bind(state, callback);43}44 