• 一个简单的控制多并发的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()
    
    
  • 相关阅读:
    【LVS 】NAT方式实现过程
    【 LVS 】类型及算法
    [ 总结 ] RHEL6/Centos6 使用OpenLDAP集中管理用户帐号
    [ 手记 ] 关于tomcat开机启动设置问题
    [ 总结 ] nginx 负载均衡 及 缓存
    Mac
    Swift
    Swift
    Cocoapods
    Swift
  • 原文地址:https://www.cnblogs.com/Rembang/p/14666342.html
Copyright © 2020-2023  润新知