当前位置:网站首页>ES6 Beginner to Mastery #15: Generator Usage
ES6 Beginner to Mastery #15: Generator Usage
2022-08-10 00:55:00 【Kay Xiaomo】
说明
ES6 从入门到精通系列(全23讲)学习笔记.
generator 函数
可以通过 yield keyword suspends the function,为了改变执行流提供了可能,同时为了做异步编程提供了方案
difference from ordinary functions:
- function 后面,函数名之前有个
*
号 - 只能在函数内部使用 yield 表达式,让函数挂起
function * func() {
yield 3;
yield 1;
yield 2;
}
// 返回一个遍历器,可以调用 next()
let kaimo = func();
console.log(kaimo)
console.log(kaimo.next())
console.log(kaimo.next())
console.log(kaimo.next())
console.log(kaimo.next())
总结:generator 函数是分段执行的,yield 语句是暂停执行,而 next()
恢复执行
function * func() {
console.log("start")
let x = yield 3;
console.log("x-->", x)
let y = yield 1;
console.log("y-->", y)
let z = yield 2;
console.log("z-->", z)
return x + y + z;
}
let kaimo = func();
console.log(kaimo.next(10))
console.log(kaimo.next(20))
console.log(kaimo.next(30))
console.log(kaimo.next(40))
console.log(kaimo.next(50))
这里的 let x = yield 2;
表达式里的 x 不是 yield 2
返回值,它是 next()
call to restore the current yield 执行传入的实参.所以这里的 x 是 20.
使用场景
为不具备 iterator An object of the interface provides traversal operations
function * objectEntries(obj) {
// 获取对象的所有keys保存到数组 [name, value]
const propKeys = Object.keys(obj);
for(const propkey of propKeys) {
yield [propkey, obj[propkey]]
}
}
const kaimo = {
name: "凯小默",
value: "kaimo313"
}
kaimo[Symbol.iterator] = objectEntries(kaimo);
console.log(kaimo);
遍历:
for(let [key, value] of kaimo[Symbol.iterator]) {
console.log(key, value)
}
边栏推荐
- Live Preview | ICML 2022 11 first-author scholars share online neural network, graph learning and other cutting-edge research
- Wireshark经典实践和面试13点总结
- Forbidden (CSRF token missing or incorrect.): /
- conda新建环境时报错NotWritableError: The current user does not have write permissions
- [Interface Test] Decoding the request body string of the requests library
- Gartner全球集成系统市场数据追踪,超融合市场增速第一
- 金仓数据库 KingbaseGIS 使用手册(6.3. 几何对象创建函数)
- 金仓数据库 KingbaseGIS 使用手册(6.6. 几何对象校验函数、6.7. 空间参考系函数)
- leetcode 20. Valid Parentheses 有效的括号(中等)
- Jpa 查询view or 无主键的table
猜你喜欢
SRv6 performance measurement
什么是平面文件数据库? 如何导入多种格式的文件:DSV、JSON、XML?
测试2年,当时身边一起入行的朋友已经月薪20k了,自己还没过万,到底差在了哪里?
complete knapsack theory
全面解析FPGA基础知识
SRv6性能测量
工程 (七) ——PolarSeg点云语义分割
【云原生】一文讲透Kubevela addon如何添加腾讯Crane
Gartner's global integrated system market data tracking, hyperconverged market growth rate is the first
技术盛宴!华云数据携六大议题亮相OpenInfra Days China
随机推荐
2022-08-09 mysql/stonedb-子查询性能提升-概论
软考 --- 软件工程(7)软件项目管理(下)
[Cloud Native] This article explains how to add Tencent Crane to Kubevela addon
上海一科技公司刷单被罚22万,揭露网络刷单灰色产业链
LeetCode952三部曲之三:再次优化(122ms -> 96ms,超51% -> 超91%)
国内十大活跃报表 BI 产品深度对比及点评
Gold Warehouse Database KingbaseGIS User Manual (6.2. Management Functions)
Click: 377. Combined Sum Ⅳ
什么是平面文件数据库? 如何导入多种格式的文件:DSV、JSON、XML?
正则表达式的实际使用
金仓数据库 KingbaseGIS 使用手册(6.6. 几何对象校验函数、6.7. 空间参考系函数)
harbor配置远程仓库
ECCV 2022 | 微软开源TinyViT :搞定小模型的预训练能力
CAD 连接两个相交线
Snap: 322. Change of Change
70. 爬楼梯进阶版
Gartner's global integrated system market data tracking, hyperconverged market growth rate is the first
直播app开发搭建,flutter 实现自适应、自动换行、相对布局
【集训DAY5】选数字【数学】
Click: 518. Change Exchange II