LazyMan

LazyMan

需求

实现 LazyMan,能按以下方式调用:
> LazyMan("Hank")
你好,我是 Hank
> LazyMan("Hank").sleep(10)
  .eat("lunch")
你好,我是 Hank
(沉默十秒)
我醒了,我刚睡了 10 秒
吃午餐
> LazyMan("Hank").eat("lunch")
  .eat("supper")
你好,我是 Hank
吃午餐
吃晚餐
> LazyMan("Hank").sleepFirst(5)
  .eat("supper")
(沉默五秒)
我醒了,我刚睡了 5 秒
你好,我是 Hank
吃晚餐
LazyMan = (name)=>{   // LazyMan('Frank').sleepFirst(5).eat('supper')
  var queue = []
  const task = () => {console.log(`你好,我是${name}`); next()}
  queue.push(task)
  const next = ()=>{ const first = queue.shift(); first?.() }
  var api = {
    _x: queue,
    sleep(n){
      const task = ()=> {
        setTimeout(()=>{console.log(`我醒了,我刚睡了${n}秒`); next()},n*1000)
      }
      queue.push(task)
      return api

    },
 eat(type){
      const task = ()=> {console.log(type === 'lunch' ? '吃午餐':'吃晚餐'); next()}
      queue.push(task)
      return api
    },
    sleepFirst(n){
      const task = ()=> {
        setTimeout(()=>{console.log(`我醒了,我刚睡了${n}秒`); next()},n*1000)
      }
      queue.unshift(task)
      return api
    }
  }
  setTimeout(()=>{ next() })
  return api
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 非原创,面试挂了,整理一下答案 原文地址->掘金-子非-如何实现一个LazyMan[https://juejin....
    何学斌阅读 504评论 0 0
  • 实现一个 LazyMan,可以按照以下方式调用:LazyMan("Hank")输出:Hi! This is Han...
    McDu阅读 373评论 0 0
  • 闲逛的时候发现了一道LazyMan的前端面试题,感觉挺有意思,下面给出本人的结题思路,以及关于promise的一些...
    jdkwky阅读 1,741评论 0 1
  • http://web.jobbole.com/89626/ 实现一个LazyMan,可以按照以下方式调用:Lazy...
    永恒不灭的梦想阅读 998评论 0 0
  • 这应该算一个经典的面试题了,就是一个关于流程控制的问题,要求如下 这是一个典型的流程控制,我们需要按照条件把事件注...
    Stevenzwzhai阅读 236评论 0 1