这可能是最容易懂的 promise 最大并发控制。

241 阅读1分钟

可以将最大并发控制想象成景区排队上厕所,正常都在排队, 当坑位紧张的时候就得排队进入, 一个完事了,让下一个进去

function sleep (time, content = '') { // 异步函数
  return new Promise((resolve) => {
    setTimeout(() => {
      resolve(content)
      console.log('content', content)
    }, time * 1000)
  })
}

function bingfa (pArr, count) {
  return new Promise((resolve) => {
    let res = []
    let runnedCount = 0;
    const recursive = (pArr, index) => {
      Promise.resolve(pArr[index]()).then(
        (val) => {
          res[index] = val; // 2.收集成果保证顺序
          if (runnedCount >= pArr.length) { // 3.记录是不是所有的人都完成了
            return resolve(res);
          }
          recursive(pArr, runnedCount++) // 4.当前蹲坑的完事了 让下一个人进去
        }
      )
    }
    for (let i = 0; i < count; i++) {
      recursive(pArr, i); // 1.首先排队 让所有的坑都占满。
      runnedCount++;
    }
  })
}

bingfa([() => sleep(1, '1'), () => sleep(13, '13'), () => sleep(1, '2'), () => sleep(1, '3'), () => sleep(1, '4'), () => sleep(1, '5')], 3)