@dioxide-js/silas
Version:
RPC utility for Silas
59 lines (49 loc) • 1.46 kB
JavaScript
import { __require as requireIterate } from './lib/iterate.mjs';
import { __require as requireState } from './lib/state.mjs';
import { __require as requireTerminator } from './lib/terminator.mjs';
var parallel_1;
var hasRequiredParallel;
function requireParallel () {
if (hasRequiredParallel) return parallel_1;
hasRequiredParallel = 1;
var iterate = requireIterate()
, initState = requireState()
, terminator = requireTerminator()
;
// Public API
parallel_1 = 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);
}
return parallel_1;
}
export { requireParallel as __require };
//# sourceMappingURL=parallel.mjs.map