UNPKG

palinode

Version:

node callback-based flow control utility library

38 lines (31 loc) 973 B
'use strict'; module.exports = { concurrent(functions, callback) { if(functions.length === 0) { return callback(null, []); } const doConcurrently = (fn, index, state, done) => { if(state.error) return; fn((error, result) => { if(error) { state.error = error; return done(error); } state.results[index] = result; state.numComplete++; if(state.numComplete === state.numToDo) { return done(null, state.results); } }); }; const initialState = { numToDo: functions.length, numComplete: 0, results: [], error: null }; functions.forEach((fn, index) => { process.nextTick(() => doConcurrently(fn, index, initialState, callback)); }); } };