SOURCE

function LazyMan(name) {
    let myName = name;

    let actions = [];

    setTimeout(() => {
        deepRun();
    }, 0)

    function deepRun() {
        console.log(actions.length)
        if (actions.length > 0) {
            let task = actions.shift();
            run(task)
        }
    }

    async function run(task) {
        if (task.then) {
            console.log('xx', task);
            let res = await task;
            deepRun()
        } else {
            console.log('yy', task);
            console.log(task)
            deepRun()
        }
    }

    const data = {
        eat,
        sleep
    }

    function eat(food) {
        actions.push(myName + ' eat ' + food);
        return data;
    }

    function sleep(time) {
        const p = new Promise((resolve, reject) => {
            setTimeout(() => {
                resolve(myName + ' sleep ' + time)
            }, time)
        })
        actions.push(p);
        return data;
    }

    return data
}


LazyMan('Tony').eat("lunch").eat('hehe').sleep(1000).eat('food');
// LazyMan('Tony').eat("lunch").sleepFirst(1000).eat('food').sleep(1000).eat('junk food');
console 命令行工具 X clear

                    
>
console