实现一个 LazyMan

发布于 2023-05-04 12:28:33 字数 2007 浏览 32 评论 0

问题

实现一个 LazyMan,可以按照以下方式调用:
LazyMan(“Hank”)输出:
Hi! This is Hank!

LazyMan(“Hank”).sleep(10).eat(“dinner”)输出
Hi! This is Hank!
//等待10秒..
Wake up after 10
Eat dinner~

LazyMan(“Hank”).eat(“dinner”).eat(“supper”)输出
Hi This is Hank!
Eat dinner~
Eat supper~

LazyMan(“Hank”).sleepFirst(5).eat(“supper”)输出
//等待5秒
Wake up after 5
Hi This is Hank!
Eat supper
以此类推。

答案

class LazyPeople {
    isHoldOn = false
    waitTasks = []
    timer = null
    constructor(name) {
        this.sayHi(name)
    }
    prepareRunTask() {
        if (this.timer) {
            clearTimeout(this.timer)
        }
        this.timer = setTimeout(() => {
            this.runTask()
        }, 0);
    }

    sayHi(name) {
        this.waitTasks.push(() => console.log(`Hi! This is ${name}!`))
        this.prepareRunTask()
        return this
    }
    sleepFirst(time) {
        this.waitTasks.unshift(() => {
            return new Promise((resolve) => setTimeout(resolve, time * 1000))
        })
        this.prepareRunTask()

        return this
    }

    eat(someThing) {
        this.waitTasks.push(() => console.log(`Eat ${someThing}~`))
        this.prepareRunTask()

        return this
    }

    async runTask() {
        const task = this.waitTasks.slice(0)
        for (let i = 0; i < task.length; i++) {
            await task[i]()
            this.waitTasks.shift()
        }
        this.waitTasks.length = []
    }

    sleep(time) {
        this.waitTasks.push(() => {
            return new Promise((resolve) => setTimeout(resolve, time * 1000))
        })
        this.prepareRunTask()
        return this
    }

}

function LazyMan(name) {
    return new LazyPeople(name)
}

// test
LazyMan("Hank")
LazyMan("Hank").sleep(10).eat("dinner")
LazyMan("Hank").eat("dinner").eat("“supper”")
LazyMan("Hank").sleepFirst(5).eat('food')

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

绅士风度i

暂无简介

0 文章
0 评论
24 人气
更多

推荐作者

qq_eQNo9e

文章 0 评论 0

内心旳酸楚

文章 0 评论 0

mb_BlPo2I8v

文章 0 评论 0

alipaysp_ZRaVhH1Dn

文章 0 评论 0

alipaysp_VP2a8Q4rgx

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文