手写 lazyman 支持链式调用

7a6ab4d44f57556f1451e3aa93d73438.png

LazyMan 是一个 JavaScript 库,它允许你以链式调用的方式来编写异步代码。这种方式可以使你的代码更加清晰和易于理解。以下是一些基本的 LazyMan 用法:

创建一个 LazyMan 实例:你可以通过调用 LazyMan(name) 来创建一个新的 LazyMan 实例,其中 name 是你想要打印的名字。

LazyMan("Hank");

这将会立即打印出 "Hi! This is Hank!"。

链式调用:你可以通过.操作符来链式调用 LazyMan 的方法。例如:

LazyMan("Hank").eat("dinner");

这将会依次打印出 "Hi! This is Hank!" 和 "Eat dinner~"。

异步操作:你可以使用 sleep(time) 方法来让 LazyMan 在一段时间后执行下一个操作。例如:

LazyMan("Hank").sleep(10).eat("dinner");

这将会首先打印出 "Hi! This is Hank!",然后等待10秒后打印 "Wake up after 10s!",最后打印 "Eat dinner~"。

以下是一个简单的 LazyMan 示例,请注意,这是一个基础的实现,实际的 LazyMan 库可能会有更多的功能和更复杂的实现。

var LazyManClass = function (name) {
  this.tasks = [];
  var self = this;
  var fn = (function (n) {
    var name = n;
    return function () {
      console.log('Hi! This is ' + name + '!');
      self.next();
    };
  })(name);
  this.tasks.push(fn);
  setTimeout(function () {
    self.next();
  }, 0); // 在下一个事件循环启动任务
};


/* 事件调度函数 */
LazyManClass.prototype.next = function () {
  var fn = this.tasks.shift();
  fn && fn();
};


LazyManClass.prototype.eat = function (name) {
  var self = this;
  var fn = (function (name) {
    return function () {
      console.log('Eat ' + name + '~');
      self.next();
    };
  })(name);
  this.tasks.push(fn);
  return this; // 实现链式调用
};


LazyManClass.prototype.sleep = function (time) {
  var self = this;
  var fn = (function (time) {
    return function () {
      setTimeout(function () {
        console.log('Wake up after ' + time + 's!');
        self.next();
      }, time * 1000);
    };
  })(time);
  this.tasks.push(fn);
  return this; // 实现链式调用
};


/* 封装成全局函数 */
function LazyMan(name) {
  return new LazyManClass(name);
}


// 调用
LazyMan('Hank').sleep(10).eat('dinner');
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值