【问题标题】:javascript method chaining not worksjavascript方法链接不起作用
【发布时间】:2021-02-19 10:17:19
【问题描述】:

//已删除问题。问题输入错误

【问题讨论】:

  • 不是直接运行代码,您需要将每个方法放在一个自定义队列中,该队列独立于原始调用进行处理。

标签: javascript


【解决方案1】:

您可以为您的“任务队列”做出承诺,因此任何需要完成的事情都将通过.then() 添加到那里。这提供了一个流畅的 API 来安排事情。

function lazyMan(name, logFn) {
  logFn(name);
  let taskQueue = Promise.resolve();
  const addTask = f => {
    taskQueue = taskQueue.then(f);
  }
  return {
    eat: function(val) {
      addTask(() => console.log(`Eating [${val}]`));
      return this;
    },
    sleep: function(timer) {
      addTask(() => new Promise((resolve, reject) => {
        console.log(`Start sleeping for ${timer} seconds`);
        setTimeout(() => {
          console.log(`End sleeping for ${timer} seconds`);
          resolve();
        }, timer * 1000);
      }))
      return this;
    }
  };
}

lazyMan("John", console.log)
  .eat("banana")
  .sleep(5)
  .eat("apple");

请注意,此更改意味着每个操作在技术上都是异步的。不过,这至少是统一的,所以记住这一点时,惊喜的可能性较小。

【讨论】:

    猜你喜欢
    • 2018-05-23
    • 2023-03-07
    • 2018-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多