export async function fastConcurrentMap( concurrency: number, xs: A[], mapFn: (val: A, idx: number) => Promise ): Promise { let idx = 0 let res = new Map() const workerF = async () => { while (idx < xs.length) { const wIdx = idx const w = xs[wIdx] idx += 1 const r = await mapFn(w, wIdx) res.set(wIdx, r) } } const r: Promise[] = [] for (let i = 0; i < concurrency; i += 1) { r.push(workerF()) } await Promise.all(r) const resAsArray: B[] = [] for (let i = 0; i < xs.length; i+= 1) { resAsArray.push(res.get(i)!) } return resAsArray }