iT邦幫忙

2022 iThome 鐵人賽

DAY 10
0
Modern Web

用Node.js建立專屬於你的API吧系列 第 10

Day10 - JavaScript進階概念(四) - async/await

  • 分享至 

  • xImage
  •  

前情提要

Promise 在處理後續是用 then()、catch() 方法來去做連接,但如果要處理的東西變多,就會導致整體程式碼被拉的很長,因此就延伸出了 async/await 這一個概念,讓整體程式碼變得更扁平,一目了然。

async/await 講解

假設有一個 Promise 的 function 如下:

function promise(number) {
    return new Promise((resolve, reject) => {
        number > 0 ? resolve("成功") : reject("失敗")
    });
}

而以下是用 async/await 的方式寫的程式碼:

async function getNumber() {
    const num1 = await promise(1);
    const num2 = await promise(2);
    console.log(num1, num2);
}
  • async:其功用在於讓非同步函式的內部以同步的方式執行非同步,也就是可以使用 await。
  • await:
  1. 其功能是讓 Promise 整個運行結束後才繼續下一個步驟,以以上範例舉例,awiat 會讓 promise(1)這個函式整個結束並且後才會執行下一個式子,也就是 promise(2),以同步的方式執行非同步的函數。
  2. 如果要使用 await 的話,就一定要用 async 在最外層包括住,他是不能單獨使用的,在沒有 async 的情況下使用會報錯。

兩者比較

這裡我們會比較 then/catch 和 async/await 兩者在使用上面的區別,讓大家對於其結構差異有大致的了解。以下皆是以上面 Promise 的 function 下去寫的:

  • then/catch 的寫法:
promise(1).then(result => {
    console.log(result);
    return promise(2);
}.then(result => {
    console.log(result);
}
  • async/await 的寫法:
async function getNumber() {
    const num1 = await promise(1);
    const num2 = await promise(2);
    console.log(num1, num2);
}

經過這兩種的方法比較後可以發現,async/await 的寫法相較於 then/catch 的寫法結構更加清楚明瞭。

處理錯誤

以上我們沒有講到如果用 await/async 寫的話,遇到錯誤要怎麼處理,在 then/catch 寫法中,我們只要使用catch 就可以解決,而在 await/async 中是使用 try/catch 來解決此問題,以下為示範:

async function getNumber() {
    try {
        const num1 = await promise(1);
        const num2 = await promise(2);
        console.log(num1, num2);
    } catch(error) {
        console.log(error);
    }
}

使用 try/catch 後就可以解決如果遇到執行失敗時要怎麼辦。


上一篇
Day 9 - JavaScript進階概念(三)- Promise 異步編程
下一篇
Day11 - Node.js 的 export/import
系列文
用Node.js建立專屬於你的API吧30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言