export async function run(tasks: (() => Promise)[]): Promise { let awaits: Promise[] = [] for (let task of tasks) { awaits.push(task()) } let results: R[] = [] for (let item of awaits) { results.push(await item) } return results } export async function runSeries(tasks: (() => Promise)[]): Promise { let results: R[] = [] for (let task of tasks) { results.push(await task()) } return results } export async function runLimit(limit: number, tasks: (() => Promise)[]): Promise { if (limit < 1) { throw new Error('limit must be greater then 0.') } let awaits: Promise[] = [] let results: R[] = [] for (let i = 0; i < tasks.length; i++) { let task = tasks[i] awaits.push(task()) if (i % limit === 0) { for (let item of awaits) { results.push(await item) } awaits = [] } } return results }