SOURCE

/*
 * 实现一个Queue类,要求包含两个函数
 * task函数:新增一个任务。包含两个参数,等待时间和回调函数
 * start函数:执行任务队列。将所有任务按队列顺序执行,执行完一个任务才能执行下一个任务
*/

async function delay(wait) {
    return new Promise((res) => {
        setTimeout(() => res(), wait);
    });
};

function Queue() {
    this.tasks = [];
};
Queue.prototype.task = function(wait, callback) {
    this.tasks.push([wait, callback]);
    return this;
};
Queue.prototype.start = async function() {
    // await / async 版本
    // for (let task of this.tasks) {
    //     await delay(task[0]);
    //     task[1]();
    // }

    // promise 版本
    let Q = Promise.resolve();
    for (let task of this.tasks) {
        Q = Q.then(()=>delay(task[0])).then(()=>task[1]());
    }
};

new Queue()
.task(1000, () => {
  console.log(1);
})
.task(1000, () => {
  console.log(2);
})
.task(1000, () => {
  console.log(3);
})
.start();
console 命令行工具 X clear

                    
>
console