限制promise并行数的实现

该博客介绍了一个名为`Dispatch`的类,用于限制Promise的并行执行数量。通过创建一个异步任务队列,`Dispatch`可以在不超过指定最大数量的同时运行多个Promise。当一个Promise完成时,会释放一个槽位,允许队列中的下一个任务开始。示例代码展示了如何添加任务到队列并控制并发执行,以确保输出顺序为2314。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/*
 *@description: 限制promise的并行数量
 *@author: codeWen666
 *@date: 2021-10-22 00:32:56
 *@version: V1.0.5
*/

class Dispatch {
  constructor (maxNum) {
    this.maxTime = maxNum || 2
    this.runTime = 0
    this.asyncQueue = []
  }

  add (promiseGenerator) {
    this.asyncQueue.push(promiseGenerator)
    this.runPromise()
  }

  runPromise () {
    if (this.asyncQueue.length && this.runTime < this.maxTime) {
      const promiseRun = this.asyncQueue.shift()
      this.runTime++
      promiseRun().then(() => {
        this.runTime--
        this.runPromise()
      })
    }
  }
}

function timeout (time) {
  return new Promise((resolve) => {
    setTimeout(resolve, time)
  })
}
const dispatch = new Dispatch()

function addTask (time, order) {
  dispatch.add(() => {
    return timeout(time).then(() => {
      console.log(order)
    })
  })
}

addTask(1000, '1')
addTask(500, '2')
addTask(400, '3')
addTask(200, '4')

// 输出结果 2 3 1 4

参考:胖头鱼

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值