首页 > 字节四面面经
头像
许愿字节、腾讯offer
编辑于 2020-12-12 19:02
+ 关注

字节四面面经

已经oc了,舒服了
可以说就一道特别难的题
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
答案如下

function Scheduler(){
let temp = 0
let res = [];
let len = 0
this.add = function(promiseCreator) {
let myPromise = new Promise(resolve=>{
temp++
if(temp <= 2){
resolve(promiseCreator().then(function f(){
if(res.length){
let {myresolve,fullfilled} = res.shift()
myresolve(fullfilled().then(f))
} else{
temp = 0
}
}))
}else{
res.push({fullfilled:promiseCreator,myresolve:resolve})
}
})
return myPromise
}
}
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(100, '4')

更多模拟面试

全部评论

(5) 回帖
加载中...
话题 回帖

推荐话题

相关热帖

历年真题 真题热练榜 24小时
技术(软件)/信息技术类
查看全部

近期精华帖

热门推荐