美文网首页
LazyMan的实现

LazyMan的实现

作者: 调皮的小卷羊 | 来源:发表于2017-08-30 12:24 被阅读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

    解题思路

    首先记录所需要执行的任务,存放在一个任务队列中,当记录完成后,开始执行任务队列。

            function LazyMan(name) {
                var taskList = []
                var task = { // 动作
                    wait(second) { //  等待
                        return () => {
                            console.log(`Wake up after ${second}`)
                            setTimeout(() => {
                                next()
                            }, second * 1000)
                        }
                    },
                    eat(part) { // 吃
                        return () => {
                            console.log(`Eat ${part}~`)
                            next()
                        }
                    },
                    say() { // 说
                        console.log(`Hi! This is ${name}!`)
                        next()
                    }
                }
    
                taskList.push(task.say)
    
                let next = () => { // 执行下一件任务
                    var fn = taskList.shift()
                    fn && fn.call()
                }
    
                setTimeout(function () {  // 记录任务完成,开始执行任务
                    next()
                }, 0)
    
                return { // 暴露接口
                    sleep(second) {
                        taskList.push(task.wait(second))
                        return this
                    },
                    sleepFirst(second) {
                        taskList.unshift(task.wait(second))
                        return this
                    },
                    eat(part) {
                        taskList.push(task.eat(part))
                        return this
                    }
                }
            }
    

    相关文章

      网友评论

          本文标题:LazyMan的实现

          本文链接:https://www.haomeiwen.com/subject/gugzdxtx.html