Skip to content

实现lazyman

功能实现

实现一个类,能够链式调用并且有log和wait方法,log方法是输出传入的参数,wait方法是等待time秒再执行后面。

示例

js
const t = new Lazyman()
t.log('hello').wait(3000).log('world').wait(1000).wait(1500).log('end')

执行后输出 hello 等待3秒后输出 world 等待2.5秒后输出 end

代码展示

第一种方法:采用next方法实现链式调用

js
// 实现lazyman
class Lazyman {
    constructor() {
        this.tasks = []
        setTimeout(() => {
            this.next()
        }, 0)
    }
    next() {
        setTimeout(() => {
            const task = this.tasks.shift()
            if (task) {
                task()
                this.next()
            }
        }, 0)
    }
    log(name) {
        this.tasks.push(() => {
            console.log(name)
            this.next()
        })
        return this
    }
    wait(time) {
        this.tasks.push(() => setTimeout(() => {
            this.next()
        }, time))
        return this
    }
}

第二种方法:无需队列,只在log方法调用时延迟执行(简易)

js
// 实现lazyman
class Lazyman {
    constructor() {
        this.time = 0
    }
    log(value) {
        setTimeout(() => {
            console.log(value)
        }, this.time)
        return this
    }
    wait(time) {
        this.time += time
        return this
    }
}