可以了,还有一个问题,为什么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

相关推荐

04-27 08:59
常州大学 Java
牛客139242382号:《两门以上汇编语言》
点赞 评论 收藏
分享
缓解焦虑的最好方法是回家。鼠鼠昨天上午考完了本科阶段的最后一场考试,大概率考得稀烂,但是没多想,考完立马收拾行李,坐上了提前约好的顺风车飞奔回家。虽然家和学校很近,只有一百多公里的路程,但距离上次回家也已经有三四个月了。每次想回家,期间总有考试、毕业设计、面试、实习等等各种各样的原因,没办法回去,待在学校和公司的每一天也都充斥着无形的压力和焦虑。现在终于完成了答辩,考完了试,公司那边也请了假,是时候回去一趟了。没有提前通知爸妈,想给他们一个惊喜。下午提前到了家,他俩还在上班,只好让外公外婆来给我开门。因为我的回家,晚上外婆在厨房格外忙碌,做了满满一大桌子菜,填饱了我天天吃外卖的肚子。晚上也没空...
梦想是成为七海千秋:取决于家庭吧?其实回家更焦虑了,每天起床父母都问实习找好了没简历投递了没今天有没有面试,但是又没有什么结果,玩两下手机父母就会说你看你啥也没找到为什么天天就知道刷手机,怎么不去学习…我现在就希望我能永远在外面实习,报喜不报忧,等拿到一个好offer再回家
点赞 评论 收藏
分享
牛客网
牛客网在线编程
牛客网题解
牛客企业服务