Cosen95 / fe_interview

字节、阿里、美团、滴滴、腾讯等大厂高级前端面试题整理
238 stars 25 forks source link

实现一个异步队列Queue,要求按时间依次执行callback #82

Open Cosen95 opened 4 years ago

Cosen95 commented 4 years ago

题目如下:

new Queue().task(1000, function () {
    console.log(1);
}).task(2000, function () {
    console.log(2);
}).start()
Cosen95 commented 4 years ago

方案1:

function Queue1() {
    this.queue = []
    this.task = (time, fn) => {
        this.queue.push({fn, time})
        return this
    }
    this.start = () => {
        let deffer = 0
        for (let i of this.queue) {
            deffer += i.time
            setTimeout(i.fn, deffer)
        }
    }
}

方案2:

function Queue2() {
    this.queue = []
    this.task = (time, fn) => {
        this.queue.push(function (resolve) {
            setTimeout(function () {
                resolve(fn())
            }, time)
        })
        return this
    }
    this.start = async () => {
        for (let i of this.queue) {
            await new Promise(i)
        }
    }
}