Open
Description
我们控制同时执行的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主讲的特别好,我也是跟他学的