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));