1. 程式人生 > 其它 >javascript中的anync/await

javascript中的anync/await

javascript中的async,await

Async( 宣告一個非同步函式)

  1. 自動將常規函式轉換為Promise
  2. 非同步函式允許使用await
  3. 當呼叫非同步函式時,使用其主體中返回的內容。

Await(暫停非同步函式的執行)

  1. 當置於Promise呼叫前面時,await強制其餘程式碼等待,直到該Promise完成並返回結果。
  2. await僅適用於Promises,它不適用於回撥。
  3. await只能在非同步函式內部使用(在ansyc中)。

使用async/await會比Promise好嘛?

  1. 使用Async / Await時,我們仍在使用Promise。
async function getABC() {
  let A = await getValueA(); // 2 second to finish
  let B = await getValueB(); // 4 second to finish
  let C = await getValueC(); // 3 second to finish

  return A*B*C;
}
async function getABC() {
  // Promise.all()允許我們同時傳送所有請求。
  let results = await Promise.all([ getValueA, getValueB, getValueC ]); 
  return results.reduce((total,value) => total * value);
}
  • 第二種方法優於第一種方法,第一種方法需要等待第一個方法執行完才執行第二方法....,第二種方法非同步執行,等到所有的都執行完畢,顯示。
  • 如果多次非同步請求得到的值不相互影響,建議使用Promise,否則建議使用async/await;

如何處理Async / Await中的錯誤

  1. 使用try / catch塊中捕獲任何意外錯誤;

    • async function doSomethingAsync(){
          try {
              // 此非同步呼叫可能會失敗.
              let result = await someAsyncCall();
          }
          catch(error) {
              // 我們將在這裡發現錯誤
          }
      }
      
    •  const result = await someAsyncCall().catch()