@cc-heart/utils
Version:
🔧 javascript common tools collection
28 lines (23 loc) • 687 B
text/typescript
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 }