SOURCE

class Supervene {
    constructor() {
        this.queue = Promise.resolve();
    }
    add(task) {
        this.queue = this.queue.then(() => task());
        return this.queue;
    }
}



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

const supervene = new Supervene();
function addTask(time,name){
    supervene.add(()=>timeout(time)).then(()=>{
        console.log(`任务${name}完成`)
    })
}

addTask(10000,1);
addTask(5000,2);
addTask(3000,3);
addTask(4000,4);
addTask(5000,5);
console 命令行工具 X clear

                    
>
console