UNPKG

@cc-heart/utils

Version:

🔧 javascript common tools collection

28 lines (23 loc) • 687 B
import { fn } from '../helper' import { isUndef } from '../lib' async function useConcurrency(tasks: Array<fn>, maxConcurrency: number) { if (isUndef(maxConcurrency)) { console.warn('maxConcurrency is undefined') return null } const ret: Array<any> = [] const excluding: any[] = [] for (let i = 0; i < tasks.length; i++) { const res = tasks[i]() ret.push(res) if (maxConcurrency < tasks.length) { const p = res.then(() => excluding.splice(excluding.indexOf(p), 1)) excluding.push(p) if (excluding.length >= maxConcurrency) { await Promise.race(excluding) } } } return Promise.all(ret) } export { useConcurrency }