动态

详情 返回 返回

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.