三面promise的题,我有遇到过类似的实现并发控制器的,不知道和楼主的是不是同一题,在这里分享下思路: class Scheduler{ constructor(){ this.taskNum = 0; this.taskQueue = []; } async add(promiseCreator){ //在Promise内部把resolve放到任务队列中,只有当resolve被调用,后面的的代码才被执行 if(this.taskNum>=2){ await new Promise((resolve)=>{ this.taskQueue.push(resolve) }) } this.taskNum++; let result = await promiseCreator(); this.taskNum--; if(this.taskQueue.length>0){ //当前任务完成后,如果任务队列里有resolve,那么就调用resolve,之前被堵住的部分就可以得到执行 this.taskQueue.shift()(); } return result; } } let scheduler = new Scheduler(); let timeout = time => new Promise((resolve)=>{ setTimeout(resolve, time); }); function addTask(delay, num){ scheduler.add(()=>( timeout(delay).then((val)=>{ console.log(num); }) )) } addTask(1000, '1'); addTask(500, '2'); addTask(300, '3'); addTask(400, '4');
3 1

相关推荐

11-03 15:39
已编辑
蚌埠医学院 Java
腾讯 wxg 实习转正 11 9.5/10 5
点赞 评论 收藏
分享
牛客网
牛客企业服务