題目要求:實現(xiàn)一個Queue類,要求調(diào)用task可以實現(xiàn)定時任務(wù)。比如Queue().task(1, 1000)是一秒輸出數(shù)字,Queue().task(2, 2000)兩秒之后輸出數(shù)字2,Queue().task(3, 3000)3秒之后輸出3。當調(diào)用run()方法之后再開始執(zhí)行輸出。
思路:題意要求類中有兩個方法,并且調(diào)用run之后才能執(zhí)行,那么想到用promise或者async/await去實現(xiàn)這個功能。
先用promise實現(xiàn)
function Queue(){
this.task = (num, time) => {
return new Promise((resolve, reject) => {
setTimeout(()=> {
console.log(num)
resolve(num);
}, time);
})
};
this.run = () => {
//并行
let first = this.task(1, 1000);
let second= this.task(2, 2000);
let third= this.task(3, 3000);
Promise.all([first, second, third]).then((result) => {
console.log(result);
});
//串行
this.task(1, 1000).then((result) => {
this.task(2, 2000).then((result) => {
this.task(3, 3000);
});
});
}
}
let queue = new Queue();
queue.run();
接下來用async/await關(guān)鍵字實現(xiàn)
function Queue(){
this.task = (num, time) => {
return new Promise((resolve, reject) => {
setTimeout(() => {
console.log(num);
resolve(num);
}, time);
})
};
this.run = async () => {
//串行
let first = await this.task(1, 1000);
let second = await this.task(2, 3000);
let third = await this.task(3, 3000);
console.log(first, second, third);
//并行
let task = [];
for(let i = 1; i < 4; i ++){
task.push(this.task(i, i * 1000));
};
Promise.all(task);
};
}
let queue = new Queue();
queue.run();