大量异步并发请求控制并发解决方案

实现思路:

可以使用 Promise 和异步函数。手动实现一个同步队列

测试数据

js 复制代码
const tasks = new Array(88).fill(0).map((_, i) => () => {
  return new Promise((resolve) => {
    setTimeout(() => {
      resolve(i)
    }, Math.random() * 1000)
  })
})

核心代码

js 复制代码
function limitRequest(tasks, limit) {
  const queue = []
  let runingCount = 0
  function enqueque(task) {
    return new Promise((resolve, reject) => {
      queue.push({
        task,
        resolve,
        reject,
      })
      run()
    })
  }

  function run() {
    while (queue.length > 0 && runingCount < limit) {
      runingCount++
      const { task, resolve, reject } = queue.shift()
      task()
        .then((value) => {resolve(value);console.log(value)})
        .catch((err) => reject(err))
        .finally(() => {
          runingCount--
          run()
        })
    }
  }

  return Promise.all(tasks.map((task) => enqueque(task)))
}

测试代码

js 复制代码
console.log(await limitRequest(tasks, 10))
相关推荐
计算机魔术师5 小时前
OpenAI内部数据曝光:AI已经替人类写了3.1倍的研究代码
前端
心易行者5 小时前
用html在线运行做数据可视化大屏,5个实战场景从入门到上线
大数据·前端·数据库·人工智能·python
光影少年5 小时前
从输入URL到页面渲染,React/RN 整体加载流程
前端·javascript·react native·react.js·前端框架
兔子零10245 小时前
我给 Pi Coding Agent 做了一个桌面控制台:Pi-Harness
前端·javascript·后端
Kevin Coding5 小时前
鸿蒙 emitter/EventHub 没有 Sticky 粘性事件?手写一个轻量级 EmitterManager 解决
前端·华为·前端框架·移动开发·harmonyos
Rescenix6 小时前
agent前台被批量举报的复盘:频率特征 + uv venv shim 幻影导致的进程双开误判
前端·人工智能
谷无姜6 小时前
QuizForge:在不停踩坑后的技术决策复盘
前端·nestjs
runningshark6 小时前
Lecture: The ‘Why & How‘ Principle: Moving Beyond Simple Statements
开发语言·前端·javascript
公爵爱学习6 小时前
无人机多点导航笔记
java·前端·笔记
是立不是利6 小时前
HTML 的尊严:一种被低估的语言
前端·html