Scheduler 的实现

434 阅读1分钟
class Scheduler {
    constructor() {
        this.current = 0;
        this.quene = []
    }

    addTask(promiseFunc) {
        if (this.current < 2) {
            this.current += 1;
            promiseFunc().then((res) => {
                this.current--;
                this.next();
            }).catch((err) => {

            })
        } else {
            this.quene.push(() => {
                this.current++;
                promiseFunc().then((resolve) => {
                    this.current--;
                    this.next();
                }).catch((err) => {

                })
            })
        }
    }

    next() {
        const nextFunc = this.quene.shift();
        if (nextFunc) {
            nextFunc();
        }
    }
}

const timeout = (ms, order) => () => new Promise((resolve) => {
    setTimeout(() => {
        console.log(order);
        resolve(order);
    }, ms * 1000);
});

const s = new Scheduler();

s.addTask(timeout(1, 1));
s.addTask(timeout(0.2, 2));
s.addTask(timeout(0.3, 3));
s.addTask(timeout(0.6, 4));