并发请求控制?

看到一道关于 JS 并发请求控制的题,大概的要求如下
要求:

  1. 并发请求
  2. 并发数有控制
  3. 并发请求每成功一个,就从队列中补一个,满足最大并发数 limit
  4. 所有请求结束后返回值按照顺序返回

方便的麻烦详细解答下。

另外看到一个解题思路,不清楚这样实现是否正确

function multiRequest(reqArr, limit) {
  const len = reqArr.length

  const res = new Array(len).fill(false)

  let count = 0

  return new Promise((resolve, reject) => {
    while (count < limit) next()

    async function next() {
      let cur = count++
      if (cur >= len) {
        return !res.includes(false) && resolve(res)
      }
      const fn = reqArr[cur]
      const data = await fn()
      res[cur] = data

      next()
    }
  })
}

const request = (delay, id) => {
  return new Promise(resolve => {
    console.log('n', delay, id)
    setTimeout(resolve, delay, id)
  })
}

const test_requests = [
  () => request(6000, 1),
  () => request(3000, 2),
  () => request(4000, 3),
  () => request(6000, 4),
  () => request(1000, 5),
  () => request(2000, 6),

]

multiRequest(test_requests, 4).then(res => {
  console.log(res)
})
阅读 2k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题