export async function each(arr: T[], iterator: ((item: T) => Promise)) { let awaits: Promise[] = [] for (let item of arr) { awaits.push(iterator(item)) } for (let item of awaits) { await item } } export async function eachSeries(arr: T[], iterator: ((item: T) => Promise)) { for (let item of arr) { await iterator(item) } } export async function eachLimit(limit: number, arr: T[], iterator: ((item: T) => Promise)) { if (limit < 1) { throw new Error('limit must be greater then 0.') } let awaits: Promise[] = [] for (let i = 0; i < arr.length; i++) { let item = arr[i] awaits.push(iterator(item)) if (i % limit === 0) { for (let item of awaits) { await item } awaits = [] } } }