LazyMan的實(shí)現(xiàn)

題目介紹

實(shí)現(xiàn)一個(gè) LazyMan,可以按照以下方式調(diào)用:
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

解題思路

首先記錄所需要執(zhí)行的任務(wù),存放在一個(gè)任務(wù)隊(duì)列中,當(dāng)記錄完成后,開始執(zhí)行任務(wù)隊(duì)列。

        function LazyMan(name) {
            var taskList = []
            var task = { // 動(dòng)作
                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 = () => { // 執(zhí)行下一件任務(wù)
                var fn = taskList.shift()
                fn && fn.call()
            }

            setTimeout(function () {  // 記錄任務(wù)完成,開始執(zhí)行任務(wù)
                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
                }
            }
        }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容