关注
可以了,还有一个问题,为什么in time out:400先于3输出? class Scheduler {
race() {
return Promise.race([...this.main]).then(() => {
// console.log(`main size ${this.main.size}`)
if (this.main.size < 2) {
let willRun = this.queue.shift()();
this.main.add(willRun);
willRun.then(() => {
this.main.delete(willRun);
});
return willRun
} else {
console.log('have to wait')
return this.race();
}
});
}
add(promiseCreator) {
if (this.queue === undefined) this.queue = [];
if (this.main === undefined) this.main = new Set();
this.queue.push(promiseCreator);
if (this.queue.length && this.main.size < 2) {
let willRun = this.queue.shift()();
this.main.add(willRun);
willRun.then(() => {
this.main.delete(willRun);
});
return willRun;
} else {
return this.race();
}
}
}
const timeout = time =>
new Promise(resolve => {
console.log("in timeout:", time);
setTimeout(() => {
resolve();
//console.log(`${time}timeout`);
}, time);
});
const scheduler = new Scheduler();
const addTask = (time, order) => {
scheduler.add(() => timeout(time)).then(() => console.log(order));
};
addTask(1000, "1");
addTask(500, "2");
addTask(300, "3");
addTask(400, "4"); // output: 2 3 1 4 // 一开始,1、2 两个任务进入队列 // 500ms 时,2 完成,输出 2,任务 3 进队 // 800ms 时,3 完成,输出 3,任务 4 进队 // 1000ms 时,1 完成,输出 1 // 1200ms 时,4 完成,输出 4
查看原帖
点赞 2
相关推荐
02-27 11:57
门头沟学院 研发工程师 点赞 评论 收藏
分享
查看7道真题和解析 点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 你知道最慷慨和最抠的公司分别是 #
4733次浏览 43人参与
# 机械人还在等华为开奖吗? #
332224次浏览 1609人参与
# 华泰星战营,提前锁定校招offer #
9456次浏览 327人参与
# 实习时最怕听到的一句话 #
3875次浏览 55人参与
# 哪些AI项目值得做? #
3157次浏览 104人参与
# 没有面试的日子里,你在做什么 #
4170次浏览 62人参与
# 简历上如何体现你的“AI”能力? #
3306次浏览 62人参与
# 你总挂在第__面? #
1991次浏览 23人参与
# 你简历上最心虚的一句话 #
9284次浏览 53人参与
# 找不到大厂实习可以去小厂吗? #
3241次浏览 31人参与
# 机械笔面试考察这些知识点 #
18316次浏览 137人参与
# 快消秋招求职进展汇总 #
11770次浏览 43人参与
# 嵌入式岗知多少 #
72799次浏览 578人参与
# 一张图晒出你司的标语 #
12582次浏览 88人参与
# 26届的你们有几段实习? #
178347次浏览 1110人参与
# 打工人的精神状态 #
150868次浏览 1549人参与
# 找工作的破防时刻 #
290603次浏览 2068人参与
# 考公VS就业,你怎么选? #
100857次浏览 535人参与
# 深信服求职进展汇总 #
269690次浏览 1834人参与
# 实习最晚的一次下班是几点 #
34486次浏览 166人参与
# 硬件人秋招进展 #
289769次浏览 4038人参与
