1

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 函数控制异步操作的执行顺序,从而使得异步操作的代码看起来像同步操作的代码,提高了异步编程的可读性和可维护性。


ohoherror
21 声望1 粉丝