Skip to content

Promise实现并发控制 #137

Open
Open
@TieMuZhen

Description

@TieMuZhen

我们控制同时执行的promise个数,比如控制为2个,后面的所有promise都排队等待前面的执行完成后再执行。

这道题是头条笔试题的其中一个,而且promise并发执行问题在面试中很常见,所以今天就来简单的写下相关的代码,解题方法不止一个,大家仅供参考

题目如下

解题代码如下

function Scheduler(){
    this.list = [];
    this.maxWorkNum = 2;
    this.workingNum = 0;
    this.add = (promiseCreator) => {
       this.list.push(promiseCreator);
    }
    this.start = () => {
        for(let i = 0; i < this.maxWorkNum; i++){
            this.run();
        }
    }
    this.run = () => {
        if(this.list.length && this.workingNum < this.maxWorkNum){
            this.workingNum++;
            this.list.shift()().then(() => {
                this.workingNum--;
                this.run();
            })
        }
    }
}

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

var scheduler = new Scheduler()

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


addTask(1000,1)
addTask(500,2)
addTask(300,3)
addTask(400,4)

scheduler.start()

题目讲解

请观看头条前端面试题之Promise并发数限制,up主讲的特别好,我也是跟他学的

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions