const LazyMan = function(name){ const array = [] const fn = () => { console.log("Hi! This is "+name+ '!'); next() } const next = ()=>{ const fn = array.shift() fn && fn() } array.push(fn) setTimeout(()=>{next()},0) const api = { sleep: (number) => { array.push(()=> { setTimeout(()=>{console.log('Wake up after '+ number); next() }, number*1000) }) return api }, eat: (content) => { array.push(() => { console.log('eat ' + content); next() }) return api }, sleepFirst: (number) => { array.unshift(() => { setTimeout(()=>{console.log('Wake up after '+5); next() }, number*1000) }) return api } } return api}