边收集边执行,在任务完成回调之前,最多只能有两个 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')

相关推荐

牛客网
牛客企业服务