美文网首页
实现一个带并发限制的promise异步调度器

实现一个带并发限制的promise异步调度器

作者: 暖暖1500 | 来源:发表于2021-09-27 15:15 被阅读0次
function Scheduler() {
    this.list = [];
    this.add = function(promiseCreator){
        this.list.push(promiseCreator);
    }
    this.maxCount = 2;
    let tempRunIndex = 0;
    this.taskStart = function() {
        for(let i = 0; i < this.maxCount; i++){
            request.bind(this)();
        }
    }

    function request(){
        if(!this.list || !this.list.length || tempRunIndex >= this.maxCount){
            return;
        }
        tempRunIndex++;
        this.list.shift()().then(() => {
            tempRunIndex--;
            request.bind(this)();
        });
    }
}

function timeout(time){
    return new Promise(resolve => {
        setTimeout(resolve, time);
    });
}

let scheduler = new Scheduler();

function addTask(time,order){
    scheduler.add(() => {
        return timeout(time).then(() => {
            console.log(order);
        });
    })
}

addTask(1000, 1);
addTask(500, 2);
addTask(300, 3);
addTask(400, 4);

scheduler.taskStart();
// 打印结果 2 31 4

相关文章

网友评论

      本文标题:实现一个带并发限制的promise异步调度器

      本文链接:https://www.haomeiwen.com/subject/paohnltx.html