動態

詳情 返回 返回

async/await實現原理 - 動態 詳情

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 頭像 Leesz 頭像 front_yue 頭像 aqiongbei 頭像 longlong688 頭像 inslog 頭像 Dream-new 頭像 xiaoxxuejishu 頭像 solvep 頭像 xiaolei_599661330c0cb 頭像 zhulongxu 頭像 assassin 頭像
點贊 99 用戶, 點贊了這篇動態!
點贊

Add a new 評論

Some HTML is okay.