ES7 引入了 async/await,这是 JavaScript 异步编程的一个重大改进,提供了在不阻塞主线程的情况下使用同步代码实现异步访问资源的能力,并且使得代码逻辑更加清晰。
从其最底层的技术点一步步往上讲解,从而彻底弄清楚 async 和 await 到底是怎么工作的。
首先介绍生成器(Generator)是如何工作的,接着讲解 Generator 的底层实现机制——协程(Coroutine);又因为 async/await 使用了 Generator 和 Promise 两种技术,所以紧接着我们就通过 Generator 和 Promise 来分析 async/await 到底是如何以同步的方式来编写异步代码的。
生成器 VS 协程
生成器函数是一个带星号函数,而且是可以暂停执行和恢复执行的。生成器函数的具体使用方式:在生成器函数内部执行一段代码,如果遇到 yield 关键字,那么 JavaScript 引擎将返回关键字后面的内容给外部,并暂停该函数的执行。外部函数可以通过 next 方法恢复函数的执行。
JavaScript 引擎 V8 是如何实现一个函数的暂停和恢复的? — 首先要了解协程的概念。协程是一种比线程更加****