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');
搞一个队列
先执行的用unshift搞进队头,后执行的用push搞到队尾
每个执行完自觉调用下一个
用异步,等到所有的任务都推进队列,我们再触发执行