0 点赞 评论 收藏
分享
永永的黄จุ๊บ:边收集边执行,在任务完成回调之前,最多只能有两个
class Scheduler {
constructor() {
this.taskArr = []
this.count = 0
}
add(promiseCreator) {
return new Promise((resolve, reject) => {
this.taskArr.push({promiseCreator, resolve})
this.run()
})
}
run() {
if(this.taskArr.length && this.count < 2) {
this.count ++
let {promiseCreator, resolve} = this.taskArr.shift()
Promise.resolve(promiseCreator()).then(() => {
resolve()
this.count --
this.run()
})
}
}
}
const timeout = (time) => new Promise(resolve => {
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')
0 点赞 评论 收藏
分享
创作者周榜
更多
关注他的用户也关注了: