问题
实现带有 sleep 的链式调用:
const pig = new Pig();
pig.eat("a").sleep(200).eat("b").sleep(200).eat("c").sleep(200);
sleep 后的代码会在指定时间后执行。
题解
使用一个已完成 Promise,不断为其加上 then 回调,得到新的 Promise,后续继续操作新的 Promise。
class Pig {
constructor() {
this.queue = Promise.resolve();
}
eat(food) {
this.queue = this.queue.then(() => {
console.log(food);
});
return this;
}
sleep(ms) {
this.queue = this.queue.then(
() => new Promise((resolve) => setTimeout(resolve, ms))
);
return this;
}
}