一道简单的面试题

158 阅读1分钟

前几天看到了一道简单的面试题,但是写了半天还是没写出来,其实特别简单,觉得自己好笨

题目是这样的,实现一个对象foo,它有两个方法,print(str)用来打印字符串,sleep(time)用来延迟时间,最终支持这样的调用:foo.print(1).sleep(1000).print(2).sleep(2000).print(3) 执行的结果是先打印1,然后过一秒钟打印2,然后过两秒钟打印3

看起来挺简单的,其实实现也很简单

class Foo {
    this.task = Promise.resolve()
    print(str) {
        this.task = this.task.then(() => {
            console.log(str)
        })
        return this
    }
    sleep(time) {
        this.task = this.task.then(() => {
            return new Promise(r => setTimeout(r, time))
        })
        return this
    }
}

明明就是promise,就是半天写不出来,我太笨了。。。😔