UNPKG

@cc-heart/utils

Version:

🔧 javascript common tools collection

27 lines (23 loc) • 768 B
'use strict'; var validate = require('../lib/validate.cjs'); async function useConcurrency(tasks, maxConcurrency) { if (validate.isUndef(maxConcurrency)) { console.warn('maxConcurrency is undefined'); return null; } const ret = []; const excluding = []; 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); } exports.useConcurrency = useConcurrency;