实现链式调用
题目
实现
show(1000,()=>{console.log(1)})
.show(1200,()=>{console.log(2)})
.show(1300,()=>{console.log(3)})
完成等待1s,打印1,之后等待1.2s,打印2,之后打印1.3s,打印3
思路
首先这个是链式调用,那么必然是返回一个变量,并且变量拥有show方法
需要把延时任务统一串联起来,注意要用闭包共享状态,启动调用开始时间
实现
const show = (time, fn) => {
const task = []
let isRun = false
const run = ({time,fn}) =>{
isRun = true
setTimeout(()=>{
fn()
task.shift()
isRun = false
checkRun()
}, time)
}
const checkRun = ()=> {
if(task.length && !isRun){
run(task[0])
}
}
const wrap = (time, fn) => {
task.push({time,fn})
checkRun()
return {show:wrap}
}
return wrap(time, fn)
}
最后更新于
这有帮助吗?