LazyMan如此简单

151 阅读1分钟
    
    class _LazyMan {
    constructor(name) {
        console.log(name)

        this.queue = [];
        setTimeout(() => {
            this.next();//关键点, 异步触发
        }, 0);
    }
    sleepFirst(time) {
        this.queue.unshift(() => {
            setTimeout(() => {
                console.log(time);
                this.next();
            }, time * 1000)
        })
        return this;
    }
    sleep(time) {
        this.queue.push(() => {
            setTimeout(() => {
                console.log(time);
                this.next();
            }, time * 1000);
        })
        return this;
    }
    eat(what) {
        this.queue.push(() => {
            console.log(what);
            this.next();
        })
        return this;
    }
    next() {
        this.queue.length > 0 && this.queue.shift()();
    }
}



function LazyMan(name) {
    return new _LazyMan(name);
}
LazyMan('Tony').eat('lunch').eat('dinner').sleepFirst(5).sleep(10).eat('junk food');
// Tony
// 5
// lunch
// dinner
// 10
// junk food

搞一个队列

先执行的用unshift搞进队头,后执行的用push搞到队尾

每个执行完自觉调用下一个

用异步,等到所有的任务都推进队列,我们再触发执行