异步函数队列化执行总结

在阅读vue-router源码的时候接触了这个异步函数队列化执行的设计,感觉还是挺厉害的,在此做个总结:




let runQueue = (queue, fn, cb) => {
    const step = (index) => {
        if(index >= queue.length) {
            cb()
        }else {
            if(queue[index]) {
                fn(queue[index], () => {
                    step(index + 1)
                })
            }else {
                step(index + 1)
            }  
        }
    }

    step(0)
}

const iterator = (fn, next) => {
    fn(() => {
        next()
    })

}
let f1 = (resolve) => {
    console.log('this is f1');
    resolve()
}


let f2 = (resolve) => {
    setTimeout(function() {
        console.log('this is f2')
        resolve();
    }, 1000)
}

let f3 = (resolve) => {
    console.log('this is f3');
    resolve();
}

let myQueue = [];


myQueue.push(f1)
myQueue.push(f2)
myQueue.push(f3)


let myCb = () => {

    console.log('all is done')
}


runQueue(myQueue, iterator, myCb)
// this is f1
// this is f2
// this is f3
// all is done
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容