问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

Async、Await 从源码层面解析其工作原理

发布网友 发布时间:2024-10-01 11:02

我来回答

1个回答

热心网友 时间:2024-10-21 03:49

深入理解 Async 和 Await 的工作原理,往往需要从源码层面进行剖析。使用 Babel 进行转换后,可以清晰地发现 Async 和 Await 实际上借助了 switch-case 和 promise,实现对流程的控制。以一个使用 Async 和 Await 的函数为例,我们仅关注核心部分代码。

经过 Babel 转换后的 name 函数,可以被拆分为三个主要部分:await 部分、return 部分以及 async 流程控制的结束部分(即 case "end")。这个拆分使得流程控制变得更为直观。在流程控制中,每一步执行后,都会等待合适的时机进入下一次执行。

这个“合适的时机”并非由 Async 内部决定,而是由执行的内容决定。例如,在发送异步请求后,只有在请求返回后才会进入下一个 case。

为了实现流程控制,需要借助 regenerator-runtime 这个 generator、Async 函数的运行时。它负责将 name 函数进行包装,并添加流程控制所需的信息。如 _context,以及用于流程控制的关键 helper,如 _asyncToGenerator 和 asyncGeneratorStep。通过这些辅助工具,再在 regenerator-runtime 的基础上进行一层包装,最终得到一个可以执行的函数。这个函数实际执行时,会调用封装后的函数。

在封装后的函数中,async1、async2 等实际上是在执行最终的封装函数内部的调用。这里的第三步是 Async 函数的核心机制。在 Promise.resolve(value).then(_next) 中,value 是每个分段最后的 case 返回的值。如果 value 是一个 Promise,那么在它 resolved 后,会将其.then添加到微任务队列。如果 value 不是一个 Promise,则直接添加,因为.then是一个微任务,当执行到它时,会调用_next,从而开始执行下一个 case。

经过转换后的代码展示了封装后的函数内容,最终执行的是封装后的函数,因此说 async1、async2 执行实际上是执行封装后的函数。在封装后的函数内部,会调用 async1、async2。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
蒙牛为什么卖给中粮 只知道名字怎么找人的联系方式 谁能告诉我怎么在微博上找人啊? 新浪微博怎么找人啊? 雅思裸考一般能考多少分 高热病人应如何护理 检疫性有害生物 多少种 北半球气温最高和最低的月份分别为 北半球气温最高和最低的月份 一起又看流星雨中有一首歌歌词是:为什么你会出现在我的身边_百度... 支付宝余额宝不安全 ES12中8个很棒的新JavaScript语言特性 Promise.race()原理解析及使用指南 Promise原理解析,你值得拥有 Promise.any()原理解析及使用指南 Promise.allSettled()原理解析及使用指南 雅漾修颜抚纹眼霜的去皱效果怎么样? 有哪些好用的去皱眼霜? 平安线下有什么贷款 平安贷款什么流程 网络犯罪常见罪名有哪些 苹果笔记本如何切换投影 简单的阐述概括一下网络犯罪的概念是什么呢 网络安全犯罪的共同犯罪都包括了哪些内容呢 macbookair怎么切换快捷键 八面威风成语接龙-八面威风的成语接龙 婴儿眼睛进毛毛怎么办 电商投手是什么职业 请教一下大师,台式电脑的无线网卡是带天线的好还是不带天线的好?光_百... 梦见去吃饭遇到前男友、然后他没钱结账、我出来就被狗咬了大腿、然后... 支付宝余额安全还是余额宝安全 详解async/await —— 从入门到实现原理 我在中国,也想在新加坡找工作,有什么途径吗? 余额跟余额宝哪个安全 小米6和小米5x买哪个好 徐州38周可以剖腹产吗? 每次住院都要查血吗?在徐州妇幼保健院 求助苹果7plus.怎么通话录音 ai可以做轮播图吗ai可以滚轮缩放吗 颈椎不好会怎么样 大染坊演职员表 直通车的出价如何统一调整? 直通车溢价怎么调整?有哪些方法? 冰糖炖梨和什么不能一起吃 qq空间V8怎么设置访问权? 什么平台存钱利息高 什么软件存款利息最高 网上购物哪个平台好优惠券 卡乐购有什么用 ...如果待25年的话,月供要多少元?25年共还款要多少?利息要多少?_百度...