Stories

Detail Return Return

async/await實現原理 - Stories Detail

async/await是ES2017帶來的異步編程語法糖,實現了讓異步代碼看起來像同步代碼的效果。

async/await 的本質是基於Promise,它並不是一種新的異步處理方式,而是Promise 的一種新的語法封裝升級。

下面是 async/await 的實現原理:

async 函數本質上是一個 Generator 函數,返回一個 Promise 對象。

await 表達式本質上是一個 Promise 對象的等待調用,相當於 Generator 函數的 yield 命令。

async 函數會把函數體內的代碼封裝成一個 Promise 對象並返回。

當 async 函數執行時,如果遇到 await ,則會將 async 函數的執行掛起,同時執行表達式後面的 Promise 對象的 then 方法,直到 Promise 對象的狀態改變後,再恢復 async 函數的執行,並返回 Promise 對象的響應結果。

如果 await 後面的表達式是一個 Promise 對象,那麼 await 將等待 Promise 對象的狀態改變,相當於 yield 後面的 argument.then()。

如果 await 後面的表達式不是 Promise 對象,那麼 await 將立即返回表達式的值。

綜上所述,async/await 的實現本質上是將異步操作封裝成 Promise 對象,並在內部通過 Generator 函數控制異步操作的執行順序,從而使得異步操作的代碼看起來像同步操作的代碼,提高了異步編程的可讀性和可維護性。

user avatar dingtongya Avatar Leesz Avatar front_yue Avatar aqiongbei Avatar longlong688 Avatar inslog Avatar Dream-new Avatar xiaoxxuejishu Avatar solvep Avatar xiaolei_599661330c0cb Avatar zhulongxu Avatar assassin Avatar
Favorites 99 users favorite the story!
Favorites

Add a new Comments

Some HTML is okay.