本文介绍: 如果当前执行的是A协程,要启动B协程就需要暂停A协程,把js主线程的控制权交给B协程,这样表现为A协程暂停,B协程开始执行,此时我们把A协程称为B协程的父协程。对于js的异步编程场景,无论是使用xhr回调还是promise回调,当异步操作过多并且每个动作之间存在依赖关系(即需要串行执行)时,代码的可读性和维护性会变得很差。在执行过程中,如果遇到yield关键字,函数会返回关键字后面的内容给外部,然后暂停执行。带*号的函数就叫生成器函数,是可以暂定执行和恢复执行的。v8是如何实现函数的执行和恢复的呢?
为什么要引入async/await操作符?
对于js的异步编程场景,无论是使用xhr回调还是promise回调,当异步操作过多并且每个动作之间存在依赖关系(即需要串行执行)时,代码的可读性和维护性会变得很差。async/await以同步代码的形式很好地解决了这个问题。
因为async/await的底层实现使用generator和promise,所以首先要了解generator的原理。
生成器函数(generator)
在执行过程中,如果遇到yield关键字,函数会返回关键字后面的内容给外部,然后暂停执行。
v8是如何实现函数的执行和恢复的呢?这里需要引入协程的概念。
协程
async/await
手动实现async、await
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。