拓展版:后续和继续添加eat, sleep

来源:8-11 手写一个LazyMan,实现sleep机制

su1per

2022-03-20



class LazyMan {
    running
    tasks = []

    constructor(name) {
        this.name = name
    }

    checkRun () {
        if(!this.running) this.next()
    }
    next() {
        let task = this.tasks.shift()
        if(task) {
            this.running = true
            task()
        } else {
            this.running = false
        }
    }

    eat(food) {
        const task = () => {
            console.log(`${this.name} eat ${food}`);
            this.next()
        }
        this.tasks.push(task)
        this.checkRun()
        return this
    }

    sleep(seconds) {
        
        const task = () => {
            setTimeout(() => {
                console.log(`${this.name} 已经睡了 ${seconds}秒了`)
                this.next()
            }, seconds * 1000)
        }
        this.tasks.push(task)
        this.checkRun()
        return this
    }
}

const me = new LazyMan('super')
me.eat('苹果').eat('香蕉').sleep(3).eat('橘子')
setTimeout(() => {
    me.eat('椰子').sleep(2).eat('芒果')
}, 5000)```

写回答

1回答

双越

2022-03-21

你的问题是?

0
3
weixin_宝慕林8180759
回复
双越
他的意思是说如果在定时器里面执行me.eat和me.sleep,课程那个版本是不支持的,因为你不知道定时器中的me.eat和me.sleep是在什么时候触发的。其实我也有这个疑问,课中的代码没有解决这种情况。我觉得这位同学的方法是对的,解决了问题。
2022-05-21
共3条回复

2周刷完100道前端优质面试真题 双越最新力作

『前端面试真题100道』视频详解

1509 学习 · 642 问题

查看课程