JS-[promises語法糖]-用async await來實現多個promises


async 與 await語法(promise語法糖)

先寫一個普通函式:

先寫上async 關鍵字

然後我要讓它變成asynchronous => 簡寫 async 函式
就是在函式function的前面加上關鍵字 async 如下:

這async函式代表的意義是,它就是一個非同步函式,這個非同步函式會在電腦後台運行,同時也會把該函式內部的程式碼都執行完成,等到這個函式在後台執行完畢,它會return返回一個promise

寫上一個或多個await(取代.then())

然後,在這個async函式中,我們可以寫入一個或是多個await語句,這await語句後面接的是『一個懸而未決的promise<pending>』,例如:前面章節有強調的

為什麼await後面要加上一個promise呢?
因為await的語句是,將在函式內有await的這一行上,停止解析執行,直到這個懸而未決的promise得到實現(fulfilled),從上面程式碼解釋的話是,暫停解析執行fetch這行載入的程式碼,直到得到網路請求資料有回覆。

fetch API會取得網路回覆的物件,要利用response.json()來解析response物件,.json()解析也是一個非同步,換句話說,它會先是一個懸而未決的promise處理中的狀態,前面要加上await語句:

await暫停解析執行該行 不是表示阻塞/blocking嗎?

別忘記,當你宣告關鍵字async函式時,代表這函式是一個非同步函式,非同步行為都會被放在電腦後台執行(不會影響到當前程式碼的執行),而不是像當前script.js檔案中的程式碼一樣會被放在call stack裡面逐一執行(執行緒里才會有blocking的情況)
這也是async和await美妙之處,他讓我們的程式碼在後台看起來像是常寫的同步逐一執行的程式碼,但是它的本質上卻是非同步。

async await搭配在.try{..}.catch{..}

  • try... catch是本身就存在在JS的語法,利用這個語法來捕捉async await的語法錯誤
#async await #Promise







你可能感興趣的文章

Java - finalize() is deprecated

Java - finalize() is deprecated

Day07 - 網格排版

Day07 - 網格排版

使用@ConfigurationProperties注入

使用@ConfigurationProperties注入






留言討論