js清除定时器连续点击的影响_js 链式调用sleep、定时器清除、链式取消(nodejs版本)...

class person {
  /** 用户类 - 姓名  */
  name = ''

  /** 执行函数 栈 */
  funs = []

  /** 定时器 数据对象 */
  timeOutVal = { timeobj: {}, time: 0 }

  /** 构造函数 */
  constructor(name) {
    /** 姓名负值 */
    this.name = name

    /** 加入执行函数 */
    this.task({ fun: () => console.info(`Hi! ${this.name}`) })

    /** 执行函数栈 */
    this.next()
    return this
  }

  /** 函数栈执行器 */
  next() {
    const fn = this.funs.shift()
    fn && fn()
  }

  /** 延迟定时器 */
  sleep(time) {
    this.task({ fun: () => console.info(`sleep ${time}`) })
    this.task({ time })
    return this
  }

  /** 清除定时器 */
  clearSleep() {
    this.task({ fun: () => {
      clearTimeout(this.timeOutVal.timeobj)
      console.info(`clear sleep ${this.timeOutVal.time}`)
      this.next()
    }})
    return this
  }

  /** 追加栈 */
  task({ fun, time }) {
    if (time) this.time = time
    this.funs.push(() => {
      const timeobj = setTimeout(() => {
        fun && fun()
        this.next()
      }, time || 0)
      if (time) this.timeOutVal = { timeobj, time }
    })
  }

  /** 吃的的函数 */
  eat(food) {
    this.task({ fun: () => console.info(`${this.name} eat ${food}`) })
    return this
  }

  /** 玩的的函数 */
  paly(what) {
    this.task({ fun: () => console.info(`${this.name} paly ${what}`) })
    return this
  }

  /** 取消上一个步骤 */
  cannel() {
    this.funs.splice(this.funs.length - 1, 1)
    return this
  }

}

new person('Tomr').eat('even').paly('bad').cannel().eat('brid').paly('good').cannel().sleep(4000).cannel().eat('678687').sleep(20000).paly('444').eat('111').clearSleep().sleep(3000).eat('222')
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值