iT邦幫忙

2021 iThome 鐵人賽

DAY 17
0
Modern Web

JavaScript 基礎修練系列 第 17

[Day17] JavaScript - Async & Await

  • 分享至 

  • xImage
  •  
  • 為解決JavaScript非同步問題,最初使用的方式是callback function,但為了避免造成callback hell,而有了ES6的Promise物件。
  • 而後ES7又出現了async function,主要目的在於簡化同步操作 promise 的表現,及對多個 Promise 物件執行某些操作。

語法

async function myFunc () {
  let resolveValue = await <Promise>
}

我們只需在function前面加上async即可使用async function,並可搭配await關鍵字,await會加在Promise之前,代表需等待Promise執行完任務之後才會進行下一步。

  • 以下方範例為例,執行的步驟為:
  1. 先執行getUsername()函數
  2. 在getUsername()函數裡,再調用sendRequest()函數
  3. 等待sendRequest()函數執行完成任務,並將resolve裡的返回值存取至username變數
  4. 最後即consol.log出Michael Jordan
function sendRequest(){   
    return new Promise(function(resolve,reject){
        setTimeout(function(){
            resolve('Michael Jordan');
        },2000);
    });
}

async function getUsername(){
    let username = await sendRequest();   //步驟2.3
    console.log(username);    //步驟4
}

getUsername();    //步驟1

總結

  • async / await 讓非同步執行程式碼更貼近同步執行程式碼
  • async function會返回Promise物件
  • await關鍵字只能在async function內使用
  • await關鍵字後面必須接Promise物件,並會等待Promise執行完任務,才繼續下一行程式碼




參考來源:
https://pjchender.dev/javascript/js-async-await/


上一篇
[Day16] JavaScript - Promise 物件
下一篇
[Day18] JavaScript - Fetch
系列文
JavaScript 基礎修練30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言