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