JavaScript 限制并发函数
问题
// countLimit 是一个函数,执行 fn,执行的并发度是 2,返回一个 Promise let countLimit = pLimit(fn, 2) countLimit(a) // 立即执行 countLimit(b) // 立即执行 countLimit(c) // 前两个函数执行完再执行 // 求实现函数 pLimit
答案
function pLimit(fn, times) { let fns = [] function executeFns() { if (fns.length && times) { const f = fns.shift() times-- f().finally(() => { times++ executeFns() }) } } function inner(...args) { fns.push(() => fn.apply(this, args)) executeFns() } return inner } let countLimit = pLimit(function (times) { console.log('test', times) return new Promise((resolve) => setTimeout(resolve, times * 1000)) }, 2) countLimit(2) countLimit(3) countLimit(2) countLimit(3) countLimit(2) countLimit(1)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
上一篇: 无重复字符的最长子串
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
更多
发布评论