async/await

同步的形式的代碼,擁有異步功能
  • await
    • 用於等待一個異步方法執行完成
    • 只能用在async裏面,用在普通函數裏面會報錯
    • await放在Promise調用以前,強制後面的代碼等待,直到Promise對象resolve,獲得resolve的值做爲await表達式結果,代碼纔會繼續往下執行
  • async
    • 用於聲明一個異步函數
    • 自動將常規函數轉成Promise,返回Promise對象
    • 異步函數內能夠使用await
    • 只有async內函數執行完成之後纔會執行then的回調函數
  • 錯誤處理
    • async函數裏,不管是Promise reject的數據仍是邏輯報錯,都會被默默吞掉,因此最好把await放入try{}catch{}中。catch可以捕捉到Promise對象rejected的數據或者拋出的異常
    • 或者直接使用cach

asyncPrint(1000).catch(err => {console.log(err); // 從這裏捕捉到錯誤})複製代碼


解決的問題
  • 回調多層嵌套
  • 多個await命令
    • 若是存在依賴關係,能夠一個一寫(後一個要等前一個執行完成才執行)

async function exc1 () {console.log('exc1 start:',Date.now())let res1 = await test1();let res2 = await test2(); // 不依賴 res1 的值console.log('exc1 end:', Date.now())}複製代碼

  • 若是不錯在依賴關係,能夠使用Promise.all()讓它們同時觸發(能夠加快執行時速度)

let [res1, res2] = await Promise.all([test1(), test2()])複製代碼
相關文章
相關標籤/搜索