当前位置:网站首页>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)
}

边栏推荐
猜你喜欢

《GB5084-2021》PDF下载

用哈希简单封装unordered_map和unordered_set

ECCV 2022 | 微软开源TinyViT :搞定小模型的预训练能力

matplotlib散点图颜色分组图例

测试2年,当时身边一起入行的朋友已经月薪20k了,自己还没过万,到底差在了哪里?

带着昇腾去旅行:一日看尽金陵城里的AI胜景

AUTOCAD——形位公差如何标注、CAD打断于点的操作

KingbaseGIS Jin Cang database using manual (6.3. Geometric object creation function)

什么是平面文件数据库? 如何导入多种格式的文件:DSV、JSON、XML?

防火墙之系统防护
随机推荐
Live Preview | ICML 2022 11 first-author scholars share online neural network, graph learning and other cutting-edge research
[Cloud Native] This article explains how to add Tencent Crane to Kubevela addon
[Interface Test] Decoding the request body string of the requests library
服务发现@EnableDiscoveryClient
【诗歌】被讨厌的勇气
2022-08-09 mysql/stonedb-子查询性能提升-概论
【集训DAY3】挖金矿【二分答案】
分布式数据库难题(二):数据复制
如何正则匹配乱码?
【渗透工具】浏览器数据导出工具
Has your phone ever been monitored?
【集训DAY4】异或【字典树】
干货!迈向鲁棒的测试时间适应
ECCV 2022 | 微软开源TinyViT :搞定小模型的预训练能力
Cmake 用法记录
【JZOF】82二叉树中和为某一值的路径(一)
国内十大活跃报表 BI 产品深度对比及点评
中国SaaS企业排名,龙头企业Top10梳理
2021年国内外五大BI厂商——优秀的商业智能工具推荐
经济衰退即将来临前CIO控制成本的七种方法