/*
* 实现一个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