队列顺序输出

2020-06-09  本文已影响0人  张思学

实现一个LazyPig,可以按照以下方式调用:
/* LazyPig("Peggy")输出:
Hello,I'm Peggy!
LazyPig("Peggy").sleep(10).eat("dinner")输出
Hello,I'm Peggy!
//等待10秒..
Wake up after 10
Eat dinner~

function LazyPig(name) {
            console.log(`Hello, I\'m ${name}!`)
            var arr = new Array();
            var isRec = false;
            var isSteep = false;
            this.sleep = function (n) {
                isSteep = true
                arr.push({
                    fun: "sleep",
                    val: n
                });
                if (!isRec) {
                    recursive();
                }
                return this;
            }
            this.eat = function (input) {
                if (isSteep) {
                    arr.push({
                        fun: "eat",
                        val: input
                    });
                } else{
                    _eat(input);
                }
                return this;
            }
            function _eat (input) {
                console.log(`Eat ${input}`);
            }
            function recursive() {
                isRec = true;
                if (!!arr) {
                    var obj = arr.shift();
                    if (!obj) return;
                    if (obj.fun === "sleep") {
                        console.log(`Wake up after  ${obj.val}`);
                        setTimeout(function () {
                            recursive();
                        }, obj.val * 1000)
                    } else {
                        _eat(obj.val);
                        recursive();
                    }
                }
            }
            return this;
        }
        LazyPig('Peggy').sleep(5).eat('dinner').sleep(1).eat('supper');
上一篇 下一篇

猜你喜欢

热点阅读