iT邦幫忙

2024 iThome 鐵人賽

DAY 16
0

Async/await

Async/await是JavaScript中處理異步操作的另一種方法,它建立在'Promise'的基礎之上。他提供了一種更直觀、更類似於同步代碼的寫法來處理異步操作。

基本概念:

1.async/await本質上就是更容易閱讀和編寫的'Promise'。
2.async:每個'async'數都會自動地返回一個'Promise',就算沒有顯式的返回'Promise',他也會自動將其封裝成為'Promise'。
3.await:用來等待一個Promise被解析(fulfilled)或拒絕。當await遇到一個Promise,他會暫停自己的執行,直到該Promise被解決為止。要注意的地方是,await只能用在async函數內。

    async function fetchData() {
        console.log('Start fetching data');
        // 輸出:Start fetching data

        let response = await new Promise(resolve => {
            setTimeout(() => {
                resolve('Data fetched');
            }, 2000);
        });

        console.log(response);
        // 輸出:Data fetched (2秒後)

        console.log('End fetching data');
        // 輸出:End fetching data
    }

    console.log('Before async call');
    // 輸出:Before async call

    fetchData();

    console.log('After async call');
    // 輸出:After async call
    ```

    輸出順序:
    1.Before async call(同步代碼,直接執行)
    2.Start fetching data(fetchData是異步函數,但同步部分先執行)
    3.After async call(同步代碼,立即執行,因為 fetchData是異步的)
    4.Data fetched(2 秒後,Promise 被解析,await暫停的部分繼續執行)
    5.End fetching data(最後執行,因為等Promise解析完成後才繼續)
    
4.並行操作:對於多個獨立的異步操作,可以使用 Promise.all()來並行執行:

async function fetchMultipleData() {
const [result1, result2] = await Promise.all([
fetchData1(),
fetchData2()
]);
console.log(result1, result2);
}


5.也可以使用for...of執行一步操作:

async function processArray(array) {
for (const item of array) {
await processItem(item);
}
}


上一篇
d15 異步編程(中)
下一篇
d17 異步編程
系列文
javascript基礎自學及各工具應用了解26
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言