关注
三面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
相关推荐
09-23 12:25
门头沟学院 嵌入式软件工程师 点赞 评论 收藏
分享
点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 国企秋招,你投了吗? #
18155次浏览 157人参与
# 应届生第一份工作最好去大厂吗? #
23477次浏览 459人参与
# 乐堡互娱校招 #
28086次浏览 251人参与
# 你在职场中沾染到的“坏”习惯 #
14583次浏览 119人参与
# 机械人,你最希望上岸的公司是? #
184153次浏览 1899人参与
# 拿到offer之后,可以做些什么 #
32023次浏览 190人参与
# 携程求职进展汇总 #
619829次浏览 4556人参与
# 海尔求职进展汇总 #
8157次浏览 35人参与
# 你会为了工作牺牲生活吗? #
43773次浏览 348人参与
# 机械只有转码才有出路吗? #
140312次浏览 1629人参与
# 通信硬件岗投递时间线 #
25744次浏览 88人参与
# 贝壳求职进展汇总 #
28570次浏览 162人参与
# 央国企投递记录 #
111836次浏览 1451人参与
# 互联网回暖,腾讯要招5000人! #
21548次浏览 584人参与
# 入职跑路最快的一次经历 #
32072次浏览 211人参与
# 机械求职避坑tips #
64846次浏览 441人参与
# 硬件开发岗知多少 #
17416次浏览 124人参与
# ___岗狗都不干,我干! #
17410次浏览 120人参与
# 为什么国企只招应届生 #
200989次浏览 1223人参与
# kpi面有什么特征 #
79156次浏览 463人参与
# 校招谈薪技巧 #
46971次浏览 674人参与
# 歌尔求职进展汇总 #
65897次浏览 352人参与