實現(xiàn)一個Queue類

題目要求:實現(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();
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • JS為什么是單線程的? 最初設(shè)計JS是用來在瀏覽器驗證表單操控DOM元素的是一門腳本語言,如果js是多線程的那么兩...
    船長___閱讀 2,319評論 1 15
  • 弄懂js異步 講異步之前,我們必須掌握一個基礎(chǔ)知識-event-loop。 我們知道JavaScript的一大特點...
    DCbryant閱讀 2,886評論 0 5
  • JavaScript執(zhí)行機制,重點有兩點: 1.JavaScript是一門單線程語言。2.Event Loop(事...
    小泡_08f5閱讀 11,888評論 2 22
  • 透徹掌握Promise的使用,讀這篇就夠了 Promise的重要性我認為我沒有必要多講,概括起來說就是必須得掌握,...
    穿牛仔褲的蚊子閱讀 2,343評論 0 16
  • 事件循環(huán)(evenloop) 事件循環(huán)機制是宿主環(huán)境提供的。js中處理異步,增加了任務(wù)隊列的概念(你不知道的js中...
    209bd3bc6844閱讀 3,017評論 0 1

友情鏈接更多精彩內(nèi)容