实现lazyman
功能实现
实现一个类,能够链式调用并且有log和wait方法,log方法是输出传入的参数,wait方法是等待time秒再执行后面。
示例
js
const t = new Lazyman()
t.log('hello').wait(3000).log('world').wait(1000).wait(1500).log('end')执行后输出 hello 等待3秒后输出 world 等待2.5秒后输出 end
代码展示
第一种方法:采用next方法实现链式调用
js
// 实现lazyman
class Lazyman {
constructor() {
this.tasks = []
setTimeout(() => {
this.next()
}, 0)
}
next() {
setTimeout(() => {
const task = this.tasks.shift()
if (task) {
task()
this.next()
}
}, 0)
}
log(name) {
this.tasks.push(() => {
console.log(name)
this.next()
})
return this
}
wait(time) {
this.tasks.push(() => setTimeout(() => {
this.next()
}, time))
return this
}
}第二种方法:无需队列,只在log方法调用时延迟执行(简易)
js
// 实现lazyman
class Lazyman {
constructor() {
this.time = 0
}
log(value) {
setTimeout(() => {
console.log(value)
}, this.time)
return this
}
wait(time) {
this.time += time
return this
}
}