叉烧两份:class Scheduler {
constructor() {
this.cur = 0;
this.prepare = [];
}
run() {
if (this.prepare.length == 0) return;
const [task, resolve] = this.prepare.shift();
this.cur += 1;
task().then(_ => {
this.cur -= 1
resolve();
this.run();
})
}
add(promiseCreator) {
return new Promise((res, rej) => {
this.prepare.push([promiseCreator, res]);
if (this.cur < 2) {
this.run();
}
})
}
}
const timeout = (time) => new Promise(resolve => {
console.log("in timeout:", time);
setTimeout(resolve, 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')
addTask(100, '5')
// output: 2 3 1 5 4
// 一开始,1、2两个任务进入队列
// 500ms时,2完成,输出2,任务3进队
// 800ms时,3完成,输出3,任务4进队
// 1000ms时,1完成,输出1,任务5进队
// 1100ms时,5完成,输出5
// 1200ms时,4完成,输出4
投递字节跳动等公司10个岗位 >
0 点赞 评论 收藏
分享
十一201809190853180:为啥还有数据库啊?
投递字节跳动等公司10个岗位 >
0 点赞 评论 收藏
分享
关注他的用户也关注了: