es6 async函数的实现原理
async函数的实现原理
async函数的实现原理,就是将 Generator函数和自动执行器,包装在一个函数里。
async function fn(args) {
// ...
}
// 等同于
function fn(args) {
return spawn(function* () {
// ...
});
}
所有的ES6 async
函数都可以写成上面的第二种形式,其中的spawn
函数就是自动执行器。
下面给出spawn
函数的实现,基本就是前文自动执行器的翻版。
function spawn(genF) {
return new Promise(function(resolve, reject) {
const gen = genF();
function step(nextF) {
let next;
try {
next = nextF();
} catch(e) {
return reject(e);
}
if(next.done) {
return resolve(next.value);
}
Promise.resolve(next.value).then(function(v) {
step(function() { return gen.next(v); });
}, function(e) {
step(function() { return gen.throw(e); });
});
}
step(function() { return gen.next(undefined); });
});
}
es6 async函数的实现原理相关推荐
- es6 async函数的语法
async函数的语法 async函数的语法规则总体上比较简单,难点是错误处理机制. 返回 Promise 对象 async函数返回一个 Promise 对象. async函数内部return语句返回的 ...
- es6 async函数的基本用法
async函数的基本用法 async函数返回一个 Promise 对象,可以使用then方法添加回调函数.当函数执行的时候,一旦遇到await就会先返回,等到异步操作完成,再接着执行函数体内后面的语句 ...
- ES6 async函数(超级详细、易懂)
下面是对 ES6 async函数的整理,希望可以帮助到有需要的小伙伴~ 文章目录 async函数是什么 异步函数声明式 异步函数表达式 返回Promise对象 await表达式 await处理错误 a ...
- es6 async函数的异步迭代器
async函数的异步迭代器 <迭代器>一章说过,Iterator 接口是一种数据遍历的协议,只要调用迭代器对象的next方法,就会得到一个对象,表示当前遍历指针所在的那个位置的信息.nex ...
- es6 async函数实例:按顺序完成异步操作
async函数实例:按顺序完成异步操作 实际开发中,经常遇到一组异步操作,需要按照顺序完成.比如,依次远程读取一组 URL,然后按照读取的顺序输出结果. ES6 Promise 的写法如下. func ...
- es6 async函数与其他异步处理方法的比较
async函数与其他异步处理方法的比较 我们通过一个例子,来看 async函数与 Promise.Generator函数的比较. 假定某个 DOM 元素上面,部署了一系列的动画,前一个动画结束,才能开 ...
- 阮一峰老师的ES6入门:async 函数
async 函数 1. 含义 ES2017 标准引入了 async 函数,使得异步操作变得更加方便. async 函数是什么?一句话,它就是 Generator 函数的语法糖. 前文有一个 Gener ...
- ES6学习笔记(十六)async函数
1.含义 ES2017 标准引入了 async 函数,使得异步操作变得更加方便. async 函数是什么?一句话,它就是 Generator 函数的语法糖,号称异步的终极解决方案. 前文有一个 Gen ...
- async 函数——JS中的异步处理方式
async 函数的语法 async function name([param[, param[, ... param]]]) { statements } name: 函数名称. param: 要传递 ...
最新文章
- kali开启禁止或删除ssh 开机启动
- 算法设计--查找无序数组中第K大的数字
- elastic-job详解(一):数据分片
- js 定时器的用法和清除
- html hover 效果,CSS八种让人眼前一亮的HOVER效果的示例代码
- 实验8 SQL Server 的存储过程
- [线性代数]Note2--矩阵消元
- kali 安装vmware 14 for linux 出现问题
- 1. 虚拟机使用技巧
- CentOS基本的命令与快捷建
- Mac 下载安装 Tomcat
- Word——论文排版技巧总结
- 数据结构银行排队系统c语言,数据结构-银行排队系统.doc
- OPA541 功率放大器 音频放大器 高电压大电流 电机功率驱动 原理图PCB
- mysql优化join_MySQL-巧用Join来优化SQL
- 电脑声音出现变声的问题
- 敏捷软件开发实践-客户合作胜过合同谈判
- 【4】 脑部MRI图像肿瘤分类级别
- (区块链溯源)基于Hyperledger Fabric 区块链的危险化学品溯源
- 产品思维训练 | 你的项目总是不能按期上线,你会如何解决?
热门文章
- 《Android深入透析》之界面
- [Oracle]如何查看一个数据文件是否是自动扩展
- VDI序曲十四 使用 RemoteFX 安装和配置 USB 重定向
- 3G或应尽早步入细分市场时代
- SpringBoot异常处理以及对数据正确性的检查
- 其他用户登陆到这台计算机,要登录到这台远程计算机,您必需拥有这台计算机上的‘终端服务器用户访问’权限解决方法...
- 12月29日云栖精选夜读 | SQL Server数据库漏洞评估了解一下
- 10-C++远征之模板篇-学习笔记
- 创建服务factory和service方法的区别
- 关闭 IOS8 最近使用 最近联系人