import { AsyncErrorCallback, SimpleFunction, ParallelCallback, NumericDictionary } from "../interfaces"; import { once } from "../common"; /** * This method executes a series of functions at once, and wait for the results * thereof. */ export function parallel( fns: SimpleFunction[], final?: ParallelCallback ): void { fns = fns.slice(); let errorNum: number = 0, completed: number = 0; let errors: NumericDictionary = {}; for (let i = 0; i < fns.length; i++) { fns[i](once(function(err?: E): void { completed++; if (err) { errors[i] = err; errorNum++; } if (completed === fns.length) { final(errorNum ? errors : null); } })); } }