带有 sleep 的链式调用

javascript/exercises/chaining_sleep2026-08-24 19:46:25

问题

实现带有 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;
  }
}

本页目录