字节面试前端,菜鸡有道题不会,

JS实现一个带并发限制的异步调度器Scheduler,保证同时运行的任务最多有两个。完善代码中Scheduler类,使得以下程序能正确输出
class Scheduler {
add(promiseCreator) { ... }  // ...}
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')
// output: 2 3 1 4
// 一开始,1、2两个任务进入队列// 500ms时,2完成,输出2,任务3进队// 800ms时,3完成,输出3,任务4进队// 1000ms时,1完成,输出1// 1200ms时,4完成,输出4

有人会吗?
全部评论
并发限制k版本,牛客咋不让贴代码了?? class Scheduler {     constructor(limit) {         this.queue = [];         this.limit = limit;         this.currentTaskCount = 0;     }     add(fn) {         return new Promise((resolve, reject) => {             this.queue.push([fn, resolve]);             this.exc();         })     }     exc() {         if (this.currentTaskCount < this.limit && this.queue.length) {             const [fn, resolve] = this.queue.shift();             this.currentTaskCount++;             Promise.resolve(fn()).then((result) => {                 resolve(result);                 this.currentTaskCount--;                 this.exc();             })         }     } }
2 回复 分享
发布于 2020-05-06 23:45
我在牛客面经看到过
点赞 回复 分享
发布于 2020-05-06 22:01

相关推荐

1.&nbsp;看代码说输出,以及说出如何让输出变为1,2,3,4,5```&nbsp;tsfor(var&nbsp;i=0;i&lt;5;++i){console.log(i)}```2.&nbsp;React组件先触发add,再点击btn说输出,再说如何让点击btn只输出2```&nbsp;tsxfunction&nbsp;App(){const&nbsp;[count,setCount]&nbsp;=&nbsp;useState(1)useEffect(()=&gt;{document.querySelector('#btn').addEventListener('click',()=&gt;{console.log(count)})})return&nbsp;&lt;div&gt;&lt;div&nbsp;onClick={()=&gt;setCount(p=&gt;p+1)}&gt;&lt;/div&gt;&lt;div&nbsp;id=&quot;btn&quot;&gt;log&lt;/div&gt;&lt;/div&gt;}```3.&nbsp;说说对闭包的理解,闭包的原理4.&nbsp;项目5.&nbsp;实习6.&nbsp;手写异步控制队列,```&nbsp;tsclass&nbsp;Scheduler&nbsp;{add()&nbsp;{//&nbsp;写}}const&nbsp;scheduler&nbsp;=&nbsp;new&nbsp;Scheduler(2);scheduler.add(()&nbsp;=&gt;&nbsp;new&nbsp;Promise((resolve)&nbsp;=&gt;&nbsp;setTimeout(()&nbsp;=&gt;&nbsp;resolve(1),&nbsp;2000))).then(console);scheduler.add(()&nbsp;=&gt;&nbsp;new&nbsp;Promise((resolve)&nbsp;=&gt;&nbsp;setTimeout(()&nbsp;=&gt;&nbsp;resolve(2),&nbsp;300))).then(console);scheduler.add(()&nbsp;=&gt;&nbsp;new&nbsp;Promise((resolve)&nbsp;=&gt;&nbsp;setTimeout(()&nbsp;=&gt;&nbsp;resolve(3),&nbsp;800))).then(console);scheduler.add(()&nbsp;=&gt;&nbsp;new&nbsp;Promise((resolve)&nbsp;=&gt;&nbsp;setTimeout(()&nbsp;=&gt;&nbsp;resolve(4),&nbsp;1000))).then(console);```二面面试官一直在笑,态度好的不得了,估计是因为我一面的时候吹逼说“我喜欢用数据结构解决问题“,然后一面面试官说”我们有个同事也喜欢,或许你和他聊得来“,估计是这位面试官了,哭了兄弟们,太和蔼了明天晚上8点三面
查看6道真题和解析
点赞 评论 收藏
分享
评论
1
6
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务