Skip to content

结合 [[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");