结合 [[202407021110-理解 Promise]] 一文一起食用。
js
class LazyMan {
constructor(name) {
this.queue = [];
this.name = name;
this.sayName(name);
Promise.resolve().then(() => {
let sequence = Promise.resolve();
this.queue.forEach((item) => {
sequence = sequence.then(item);
});
});
}
sayName(name) {
this.queue.push(() => {
console.log(`Hi! this is ${name}!`);
});
return this;
}
eat(meal) {
this.queue.push(() => {
console.log(`eat ${meal}`);
});
return this;
}
_holdOn(time) {
return () =>
new Promise((resolve) => {
setTimeout(() => {
console.log(`Wake up after ${time} second`);
resolve();
}, time * 1000);
});
}
sleep(time) {
this.queue.push(this._holdOn(time));
return this;
}
sleepFirst(time) {
this.queue.unshift(this._holdOn(time));
return this;
}
}
const lazyMan = new LazyMan('hank');
lazyMan.sleepFirst(2).eat("dinner").sleep(3).eat("supper");