ES6之genorator和yield使用(迭代器)
例1:
function *g(){
yield 100
yield 200
return 300
}
let res = g()
console.log(res);
console.log(res.next());
console.log(res.next());
console.log(res.next());
console.log(res.next());
// 输出:
/*
Object [Generator] {}
{ value: 100, done: false }
{ value: 200, done: false }
{ value: 300, done: true }
{ value: undefined, done: true }
*/
next方法类似promise .then链式调用
done属性的值代表是否调用完毕
例2:
function* g() {
yield 100;
yield 200;
yield g2();
return 500;
}
function* g2() {
yield 300;
yield 400;
}
let res = g();
console.log(res);
console.log(res.next());
console.log(res.next());
console.log(res.next());
console.log(res.next());
console.log(res.next());
// 输出
/*
Object [Generator] {}
{ value: 100, done: false }
{ value: 200, done: false }
{ value: Object [Generator] {}, done: false }
{ value: 500, done: true }
{ value: undefined, done: true }
*/
可以看出,正常情况下,如果在一个迭代器里调用另一个迭代器,返回的是迭代器本身,不会对另一个迭代器遍历
如果想要调用另一个迭代器进行遍历的话,可以使用 yeild* 修饰这个迭代器:
function* g() {
yield 100;
yield 200;
yield* g2();
return 500;
}
function* g2() {
yield 300;
yield 400;
}
let res = g();
console.log(res);
console.log(res.next());
console.log(res.next());
console.log(res.next());
console.log(res.next());
console.log(res.next());
console.log(res.next());
// 输出:
/*
Object [Generator] {}
{ value: 100, done: false }
{ value: 200, done: false }
{ value: 300, done: false }
{ value: 400, done: false }
{ value: 500, done: true }
{ value: undefined, done: true }
*/
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 智能桌面机器人:用.NET IoT库控制舵机并多方法播放表情
· Linux glibc自带哈希表的用例及性能测试
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 新年开篇:在本地部署DeepSeek大模型实现联网增强的AI应用
· DeepSeek火爆全网,官网宕机?本地部署一个随便玩「LLM探索」
· Janus Pro:DeepSeek 开源革新,多模态 AI 的未来
· 互联网不景气了那就玩玩嵌入式吧,用纯.NET开发并制作一个智能桌面机器人(三):用.NET IoT库
· 上周热点回顾(1.20-1.26)