zoukankan      html  css  js  c++  java
  • 一个简单的控制多并发的promise

    一个简单的控制多并发的promise

        class limitPromise {
            constructor(max) { 
                /*
                
                * @param _max 表示最大并发数
                * @param _taskQueue 表示任务队列
                */
                this._max = max;
                this._taskQueue= [] 
            }
            
            addTask (task) {
                this._taskQueue.push(task)
            }
    
            run() {
                // 如果任务队列为空,任务停止
                if(this._taskQueue.length === 0) {
                    return 
                }
                let min = Math.min(this._taskQueue.length,this._max);
                // 
                for(let i = 0;i<min; i++) {
                    this._max--;
                    let task = this._taskQueue.shift()
                    task().then(res=>{
                        console.log(res)
                    }).finally(()=>{
                        // 任务结束开始下一轮
                        this._max++;
                        this.run()
                    })
                }
            }
        }
    
    const limitPromiseObj = new limitPromise(5)
    
    limitPromiseObj.addTask(function() {
        return new Promise((res,rej)=>{
            setTimeout(()=>{
                res("第一个")
            },500)
    })
    })
    limitPromiseObj.addTask(function() {
        return new Promise((res,rej)=>{
            setTimeout(()=>{
                res("第2个")
            },500)
    })
    })
    limitPromiseObj.addTask(function() {
        return new Promise((res,rej)=>{
            setTimeout(()=>{
                res("第3个")
            },500)
    })
    })
    limitPromiseObj.addTask(function() {
        return new Promise((res,rej)=>{
            setTimeout(()=>{
                res("第4个")
            },500)
    })
    })
    limitPromiseObj.addTask(function() {
        return new Promise((res,rej)=>{
            setTimeout(()=>{
                res("第5个")
            },500)
    })
    })
    limitPromiseObj.addTask(function() {
        return new Promise((res,rej)=>{
            setTimeout(()=>{
                res("第6个")
            },600)
    })
    })
    limitPromiseObj.addTask(function() {
        return new Promise((res,rej)=>{
            setTimeout(()=>{
                res("第7个")
            },700)
    })
    })
    
    limitPromiseObj.run()
    
    
  • 相关阅读:
    实例变量和类变量
    Spring源码解读(一)
    linux shell学习三
    linux shell学习二
    linux shell学习一
    利用Zynq Soc创建一个嵌入式工程
    (转) 使用vivado创建工程 4[完结]
    (转) 使用vivado创建工程 3
    (转) 使用vivado创建工程 2
    (转) 使用vivado创建工程 1
  • 原文地址:https://www.cnblogs.com/Rembang/p/14666342.html
Copyright © 2011-2022 走看看